【问题标题】:Creating a Min heap or a Max heap创建最小堆或最大堆
【发布时间】:2012-05-26 06:52:39
【问题描述】:

对于创建一个包含 n 个元素的 Min heap 或 Max Heap,创建一个堆所花费的时间将是 O(nlogn)。因为,每次插入都需要 O(logn) 时间,因此 n 个元素需要 O(nlogn) 时间

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

【问题讨论】:

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


【解决方案1】:

最佳方法不需要登录时间来插入节点。

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

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

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

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

等于O(n)

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

【讨论】:

猜你喜欢
  • 2010-12-29
  • 2023-03-16
  • 1970-01-01
  • 2013-10-09
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2013-03-29
相关资源
最近更新 更多