【发布时间】:2013-02-14 15:54:23
【问题描述】:
我正在为堆编写siftup 算法,但我被困在问题的最后。问题的最后一部分说算法应该具有对数最坏情况时间复杂度,即O(log(n)。我写了下面的算法,其中i 是堆中元素的索引,v 是堆数组。根的索引是最低的,而它的最大值是堆的最低孩子。我正在考虑数组从 1 到 n
算法
Siftup (v, i) {
While(v[i] > v[i/2] and i != 0) {
Temp = v[i] // Temp is of the same type as v[i]
v[i] = v[i/2]
v[i/2] = temp
i = i / 2
}
}
由于该过程涉及while loop 中的四个赋值语句,每个语句都具有恒定的最坏情况时序,因此该算法应该具有对数最坏情况时间复杂度。任何人都可以展示一种方法来确定其O(n),其中n 是堆中元素的数量?
附:也请告诉我算法中的错误。
【问题讨论】: