为了创建n个元素的Min堆或Max Heap,用于创建堆的时间为O(nlogn)。因为,每次插入都需要O(logn)时间,因此n个元素需要O(nlogn)时间
但是在许多地方写的是堆的创建可以优化到O(n)时间,即线性时间?但是没有明确解释如何?
答案 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)