合并2个最大堆

时间:2015-12-12 17:29:19

标签: max-heap

我需要找到最有效的算法来合并2个max-sheaps。

一些重要事实:堆被表示为二叉树,这意味着每个节点有3个字段 - 值(键),指向右子节点的指针和指向左子节点的指针。

我的想法:获取第二个堆的最后一个叶子并将其作为新堆的根。所以我们得到一个新的堆,当左子是合法的最大堆,而右子是合法的最大堆。问题(我认为)只是根不是最大元素的事实 - 所以我们可以从根运行函数 Max-Heapify ,我认为它应该解决问题。

最差情况下的总运行时间 - O(logn) - 因为以root作为根 O(1),并且最大 - Heapify < / strong>是 O(登录)

你怎么看?我对么? 是否有更有效的算法来合并2个max-sheaps? (请考虑表示是二叉树的事实)

1 个答案:

答案 0 :(得分:0)

您提出的方法存在两个问题。首先是表示:通常堆被表示为数组,而不是具有指针的单个节点,这将需要$('#tab1-slideout span').click(function (event) { event.stopPropagation(); manageToggleStateTab1(); }); 交错操作。

即使您对前面的数组存储没有问题,也需要考虑形状属性。除非你非常幸运,否则左右堆不会是正确的大小,结果是一个有效的堆(也就是说,叶子的深度最多为1,并且所有的更深的叶子在左边。)

有关合并二进制堆的更多信息,请参阅Algorithm for merging two max heaps?。但是,如果您不使用数组表示,那么并非所有的内容都必须适用。