假设h1和h2是两个完整的二叉树,它们也是堆。假设h1和h2是最大堆,每个堆的大小都是n。设计并分析一个有效的算法,将h1和h2合并为一个新的最大堆h,大小为2n。
==========================================================================
方法-首先复制两个数组的H1和H2到一个新数组的大小2n…然后应用构建堆操作获得H.…时间复杂度= O(2n)= O(n),但不需要我们应用马克斯HeAPIVE后,建立堆?那么,O(logn)时间在哪呢。
===================================================================
另一种方法是合并两个最大堆需要O(n+m)时间现在,什么是正确的,为什么没有人关心麦克斯·希帕菲?

最佳答案

MaxHeapify操作需要O(logn)时间。
在编译堆操作中,我们需要调用maxheapify n次。因此,构建堆操作的总复杂性似乎是O(nLogn)。
但这是不对的。实际上,构建堆操作只需要O(N)时间。您可以参考此链接来了解它。
https://www.geeksforgeeks.org/time-complexity-of-building-a-heap/
因此,需要用O(2n)=o(n)时间复杂度来构建大小为2n的新堆h。
如果考虑大小m和n的两个最大堆,则需要O(m+n)时间复杂度来构建大小为m+n的新堆。

关于algorithm - 合并两个完整的二叉树的最大堆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50998738/

10-10 22:31