0
我正在爲堆編寫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
是堆中元素的數量?
P.S.請讓我知道我的算法中的錯誤。
條件'i!= 0'不能達到目的,因爲這是元素值停止篩選的點。 – 2013-02-14 16:02:38
@buzzinga:我不得不考慮一下 - 我認爲它可能有效,但我不確定(當我在C++中編寫了一個heapsort時,我已經欺騙並使用了基於1的索引)。 – 2013-02-14 16:21:28