2011-06-22 37 views
2

我想實現的算法書here給予最大heapify算法 在本書中的算法中是最大heapify算法0索引

MAX-HEAPIFY(A,i) 
1 l<-LEFT(i) 
2 r<-RIGHT(i) 
3 if l<=heap-size[A] and A[l]>A[i] 
4 then largest<--l 
5 else largest<--i 
6 if r<=heap-size[A] and A[r]>A[largest] 
7 then largest <->r 
8 if largest!=i 
9 then exchange A[i]<->A[largest] 
10  MAX-HEAPIFY(A,largest) 

我的問題是我的數組開始在Zero.Where爲在書中,他們假設,如果父母的指數是我然後離開孩子是2i和正確的孩子是2i + 1,但是當他們的指數從1開始。在我的情況下它是零,那我該怎麼計算左右指數兒童?

+0

你的意思是「Cormen」。 –

回答

5

左邊的孩子在2i + 1,右邊的孩子在2(i + 1)= 2i + 2。

可以證明這是正確致電基於一個標記j,定義I = j的 - 1,觀察到

j = i + 1 
left + 1 = 2j = 2(i+1) = 2i+2 
right + 1 = 2j+1 = 2(i+1) + 1 

所以

left = 2i+1 
right = 2(i+1) 

(您也可以保存自己通過過度使用單個元素造成一些麻煩。)

+0

@Iarsmans很棒。 +1 –

+0

@Iarsmans你爲什麼要在上面的等式中留下+ 1和+1。 –

+0

@註冊用戶:我想你已經想通了,不是嗎? ;) –

相關問題