因此,即時通訊試圖在這裏實現bottomupheap算法: http://www.apl.jhu.edu/Classes/Notes/Felikson/courses/605202/lectures/L8/L8.html自下而上堆在Java中的錯誤
Algorithm bottomUpHeap(S) Input: a sequence S storing 2h-1 keys Output: a heap H storing the keys in S if S is empty then return an empty heap remove the first key, k, from S Split S into subsequences S1 and S2, each of size (n-1)/2 H1¬ bottomUpHeap(S1) H2¬ bottomUpHeap(S2) Create binary tree H such with k at root, H1 at left subtree and H2 at right subtree Perform down-heap bubbling from root if necessary return H
這已經有一段時間,因爲我編程Java和我不斷收到一些錯誤不認得我。我想知道是否有人會通過清除一些算法步驟來幫助我。
我創建了一個包含數據和左右引用指針(或任何java調用它們)的Heap節點。輸入序列是一個數組,它被轉換爲ArrayList
。那就是我通過上面的函數。
我從S中刪除第一個密鑰,並用該密鑰創建一個新節點。在我的示例中,我只使用了Integer
s,並將鍵設置爲數據引用。
然後我用 S1 = S.sublist(0, S.length/2)
和 S2 = S.sublist(S.length/2, S.length)
繼承人是我到目前爲止有:爲S. Tree
被定義爲Tree(data, left, right)
的ArrayList
傳遞。謝謝。
private Tree Heapify(List<Integer> S){
if (S.isEmpty()){
Tree emptyHeap = new Tree();
return emptyHeap;
}
int tmpk = S.get(0);
S.remove(0);
int halfArr = S.size()/2;
List<Integer> S1 = S.subList(0, halfArr);
List<Integer> S2 = S.subList(halfArr, S.size());
Tree k = new Tree(tmpk, Heapify(S1), Heapify(S2));
//Downheap.
return null;
}
從它似乎是什麼,當一個空的列表被傳遞使用的子表由於某種原因,當它不認爲它的空列表。它看起來像什麼時候它試圖做一些空的如S.isEmpty()時會引發錯誤。
謝謝!
有趣的是,java.util.concurrent.CopyOnWriteArrayList中的實施是 「公共布爾的isEmpty(){ \t返回大小()== 0;} 」 – CMR 2011-02-16 15:54:11