创建最小堆或最大堆

时间:2012-05-18 17:17:55

标签: algorithm time heap complexity-theory time-complexity

  

为了创建n个元素的Min堆或Max Heap,用于创建堆的时间为O(nlogn)。因为,每次插入都需要O(logn)时间,因此n个元素需要O(nlogn)时间

但是在许多地方写的是堆的创建可以优化到O(n)时间,即线性时间?但是没有明确解释如何?

1 个答案:

答案 0 :(得分:4)

最佳方法不需要登录节点的登录时间。

  

最佳方法首先将元素任意放在a上   二叉树,尊重形状属性(如树可能   由数组表示)。然后从最低级别开始   向上移动,将每个子树的根向下移动   删除算法,直到堆属性恢复。更多   特别是如果所有子树都从某个高度开始h(测量   从底部)已经“堆积”,树木在高处   h+1可以通过沿着路径向下发送根来进行堆积   在构建max-heap或最小值时,最有价值的孩子   建立min-heap时的孩子。此过程需要O(h)交换   每个节点的操作。在这种方法中,大多数堆化都需要   放在较低的水平。由于堆的高度为logn,   高度上的节点数为h。因此,成本   堆积所有子树是:

     

h = 0 Σ logn n / 2 h + 1 = O(n *    h = 0 Σ logn h / 2 h )小于

     

O(n * h = 0 Σ h / 2 h

since h / 2h converges to 2 as it is an infinite series
     

等于O(n)

来源:http://en.wikipedia.org/wiki/Binary_heap#Building_a_heap