首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何降低使用heap合并多个数组的复杂度?

如何降低使用heap合并多个数组的复杂度?
EN

Stack Overflow用户
提问于 2014-03-15 02:10:05
回答 1查看 344关注 0票数 0

我对这个问题中提出的想法进行了编码:merging sorted arrays,如下所示:Big-O complexity calculation for a merge and sort function

可以看出,这种方法的复杂性超过了所希望的程度。有没有更好的方法(除了使用LINQ)?这种方法的根本缺陷是什么,如果有的话?

EN

回答 1

Stack Overflow用户

发布于 2014-03-15 02:31:24

我们可以使用最小堆在O(nk*Logk)时间内合并数组。

n=数组的最大大小,k =数组的数量。

  1. 创建一个大小为n*k的输出数组(您也可以打印它们)。
  2. 创建一个大小为k的最小堆,并将所有数组中的第一个元素插入到堆中
  3. 重复以下步骤n*k次。

a)从堆中获取minimum元素(minimum始终位于根),并将其存储在输出数组中(或打印它)。

b)用从其中提取元素的数组中的下一个元素替换堆根。如果数组没有更多的元素,则将root替换为infinite。在替换了根之后,堆积树。

Time Complexity:主要步骤是3rd步骤,循环运行n*k次。在循环的每一次迭代中,我们调用heapify,这会占用O(Logk)时间。

因此,时间复杂度是O(nk*Logk)

EDIT1:Heapify确保你总是有最小堆,如果最小的子节点小于父节点,它会将最小的子节点与父节点交换。

这确保了INFINITY元素将保留在堆的底部,而所有k数组中的最小元素将保留在堆的顶部(根)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22412694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档