BuildHeap - Floyd - FixHeap概念的算法

时间:2013-02-08 17:02:45

标签: algorithm data-structures heap complexity-theory

我正在尝试理解关于堆的简单概念。

我知道 BuildHeap 使用 Floyd 算法需要Theta(n)来构建一个大小为n的堆。我们获得这个运行时间的方法是从下到上构建堆 - 这样,更大量的堆可以减少工作量。

我对这个概念有一个不确定但有一个不同的细节,问题如下:

  

“假设已知的'FixHeap'取代Theta(log(log(n))而不是   西塔(的log(n))。什么是BuildHeap的运行时间   使用新的'FixHeap'构建大小为N的最大堆的算法   算法(现在只采用Theta(log(log(n)))

的算法

我不明白新给定的FixHeap的运行时间如何影响整个算法的运行时间。你能帮我理解一下这些变化吗?

FixHeap是已知算法,它将父级与其左右子级进行比较,并将最大值放在父级中。作为叶子的父节点的顶点上的FixHeap将进行最多一次替换,并且该顶点的父节点可以进行两次替换等等。

编辑:当前的BuildHeap运行时间由以下表达式计算:

(n / 4)* 1 +(n / 2)* 2 +(n / 3)* 3 + ...... + 1 * logn-1

仅仅因为叶子中有n / 4个父亲最多进行1次更改,并且有n / 2个最多进行2次更改等等...

我现在无法看到公式的变化。

谢谢!

1 个答案:

答案 0 :(得分:2)

此算法仍将采用Θ(n)时间。为了看到这一点,我们可以证明该算法是O(n)和Ω(n)。

对于O(n)部分,请注意,此算法显然不能比FixHeap每次采用O(log n)时间的版本渐近地慢。由于heapify算法在第二种情况下需要O(n)时间,因此我们也可以获得O(log)n时间情况的O(n)时间限制。

对于Ω(n)部分,请注意,heapify算法的工作原理是对数组前半部分中的每个元素执行一次FixHeap过程。迭代超过n元素阵列的一半需要至少Ω(n)时间,从而为我们提供所需的下限。

希望这有帮助!