自下而上的HeapSort与自上而下的HeapSort(性能明智)

时间:2018-05-28 02:19:07

标签: performance sorting heapsort

自下而上的HeapSort和自上而下的HeapSort之间有哪些性能差异?

1 个答案:

答案 0 :(得分:0)

堆是二叉树;因此,我们知道它具有log n深度,并且每个级别都有2 ^ i个节点。级别0(根)具有1个节点,级别1具有2个节点,级别2具有4个节点,依此类推。

现在考虑一下您提到的两种方法:

对于自下而上,我们将节点插入到底部,并让它们每次都“冒泡”堆。相反,对于自顶向下,我们让节点“掉落”到其应有的位置。哪个效率更高?

让我们考虑一下最坏的情况:

自下而上,每个节点都可以上升到最高层。在级别1,需要进行一次交换(在两个节点上);在第2层,它需要两个(在四个节点上)...并且一旦到达最后一个层,就必须进行log n个交换(在相当大的n / 2个节点上)!这使我们获得了O(n log n)的效率。

自顶向下:在每个级别,任何节点都可以落到树的底部(log n交换)。它与自下而上的区别在于,随着最大跌落距离的增加,受其影响的潜在节点数量会减少。级别0是唯一可以下降为log n的节点,并且它只是一个节点(而不是自下而上的n / 2)。因此,所有“落差”的总和为O(n),这是效率更高的算法。