让H1和H2是两个完整的二叉树,它们也是堆。假设H1和H2是最大堆,大小均为n。设计并分析一种有效的算法,将H1和H2合并为新的大小为2n的最大堆H。
================================================ =========================
方法-首先将H1和H2的两个数组复制到大小为2n的新数组中...然后应用构建堆操作以获取H ...时间复杂度= O(2n)= O(n),但是没有建立堆后是否需要应用Max heapify?因此,为此考虑的O(logn)时间在哪里。
================================================ ====================
另一种方法是说,合并两个最大堆需要O(n + m)时间。现在,什么是正确的,为什么没人要照顾Max Heapify?
答案 0 :(得分:2)
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的新堆。