Algorithm 合并两个完全二叉树的最大堆

Algorithm 合并两个完全二叉树的最大堆,algorithm,data-structures,heap,Algorithm,Data Structures,Heap,设H1和H2是两个完整的二叉树,它们也是堆。假设H1和H2是最大堆,每个堆的大小为n。设计并分析一个有效的算法,将H1和H2合并为大小为2n的新最大堆H ========================================================================== 方法-首先将H1和H2的两个数组复制到大小为2n的新数组中…然后应用构建堆操作以获得H…时间复杂度=O(2n)=O(n),但不需要在构建堆后应用Max heapify?那么,O(logn)时间在哪

设H1和H2是两个完整的二叉树,它们也是堆。假设H1和H2是最大堆,每个堆的大小为n。设计并分析一个有效的算法,将H1和H2合并为大小为2n的新最大堆H

==========================================================================

方法-首先将H1和H2的两个数组复制到大小为2n的新数组中…然后应用构建堆操作以获得H…时间复杂度=O(2n)=O(n),但不需要在构建堆后应用Max heapify?那么,O(logn)时间在哪里呢

===================================================================


另一种方法是合并两个max堆需要O(n+m)时间。现在,什么是正确的,为什么没有人关心Max Heapify?

MaxHeapify操作需要O(logn)时间。 在构建堆操作中,我们需要调用MaxHeapify n次。因此,构建堆操作的总复杂性似乎是O(nlogn)

但这是不正确的。实际上,构建堆操作只需要O(n)个时间。您可以参考此链接了解它

因此,构建大小为2n的新堆H需要O(2n)=>O(n)时间复杂度


如果考虑两个最大大小m和n的堆,则取O(m+n)构建大小为m+n的新堆的时间复杂度。

应用构建堆操作获取H和
Max heapify
之间有什么区别?
复制H1和H2的两个数组
每个堆是否表示为具有任务规范相对位置部分指定关系的节点数组?如果没有:H1和H2是否可以修改/销毁?