二进制最大堆时间复杂度

时间:2014-03-23 15:59:42

标签: c++ data-structures heap time-complexity

我无法找到Binary Heaps的时间复杂度。 在一个post,它说明了

  1. 创建二进制最大堆是O(n)
  2. 添加/插入项目为O(登录)
  3. 然而wikipedia

    1. 创建二进制堆是O(nlogn)
    2. 添加/插入项目为O(登录)
    3. 如果有人能告诉我二进制(最大)堆的创建,添加和删除时间复杂性是什么,我会感激的吗?

4 个答案:

答案 0 :(得分:1)

维基百科文章提出了一种在O(n)中构建堆的算法。当然,您可以在O(n log n)上构建它。

所有其他修改操作都需要O(log n)。

答案 1 :(得分:1)

将无序数组转换为二进制堆到位是O(n)操作。很明显,如果你有一堆你想要构建堆的项目,你可以将它们放在一个数组中并调用一个将数组重新排列成堆的方法。该方法通常称为BuildHeapHeapify

如果构建一个空堆然后向其中添加n个项,则需要执行O(log n)操作才能插入每个项目,从而实现O(n log n)运行时间。

答案 2 :(得分:0)

从下到上堆的时间复杂度是 O(n)(使用给定的 arry 来堆)

从上到下堆的时间复杂度为O(nlogn)(一次创建一个节点)

答案 3 :(得分:0)

您可以通过一个接一个地插入 n 个元素来构建一个二叉堆,这意味着运行时间是 O(n log(n)) 假设堆属性对所有高度为 h 的子树都成立。您可以使用具有 log(n) 阶段的自底向上构造来构建存储 n 个键的堆。由于每个节点最多经过两条代理路径,因此代理路径上的节点总数为 O(n)。因此,自底向上堆构建的运行时间为 O(n)。