比方說,我想檢查堆中的索引是否有孩子。這個堆實現以Java的數組形式存在。檢查堆中的hasChild
在我的boolean hasChild
函數中,我想用if(index < currentSize/2)
來檢查它,其中currentSize是用於實現堆的數組的大小。
這是覆蓋的情況下,根在索引0或1?我覺得很難想象它。如果是前者,我如何爲後者實施?或相反亦然。
如果有任何不清楚的地方,將編輯帖子。
(很抱歉,但我需要2K代表接受編輯)
比方說,我想檢查堆中的索引是否有孩子。這個堆實現以Java的數組形式存在。檢查堆中的hasChild
在我的boolean hasChild
函數中,我想用if(index < currentSize/2)
來檢查它,其中currentSize是用於實現堆的數組的大小。
這是覆蓋的情況下,根在索引0或1?我覺得很難想象它。如果是前者,我如何爲後者實施?或相反亦然。
如果有任何不清楚的地方,將編輯帖子。
(很抱歉,但我需要2K代表接受編輯)
假設最小堆。索引始終從1開始。即使對於第一個元素,位置公式也可以保持一致。使用這個約定直接的孩子總是在2K和2K + 1。所以對於不存在的孩子,2k必須大於kmax。
2K> KMAX
K> KMAX/2
如果使用一個數組,其中元素0是空KMAX實際上是數組大小 - 1。如果使用的是一個數組索引偏移它只是數組大小。因此,實現的實際公式取決於您對index和maxSize的定義。但是如果你正在構建一個最大堆,你的公式基本上看起來是正確的。
根再也沒能蜜蜂0。因爲左子的索引是2n,右子是2n + 1,其中n是當前索引。並且0是中立的乘法。
如果實現與array..the堆下面的謂語應該是足夠了:
(2 * IDX < = arr.size & & ARR [2 * IDX]!= NULL)& &(2 * IDX + 1 = < arr.size & & ARR [2 * IDX + 1]!= NULL)
'< =' 因爲你是1,而不是從0一如既往指望..
檢查這參考ence for堆的: http://www.cs.bgu.ac.il/~ds132/wiki.files/ds132_ps9_updated.pdf
Java堆沒有索引可用於程序員,所以如果這是Java(就像它最初被標記),我們真的不知道你在問什麼。如果是其他語言,請告訴我們它是什麼。 「孩子」的含義也不清楚。 – Radiodef
@Radiodef好的,會將標籤更改回Java,因爲它是如何實現的。我很困惑爲什麼有人建議將它改爲'算法',而不是通常使用數組實現的堆? –
我認爲Radiodef將java內存模型堆與我認爲你正在談論的內容混淆在一起:Java中的堆數據結構的實現。 –