我正在为堆编写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
堆中元素的数量在哪里?
PS还请让我知道我的算法中的错误。