最大ヒープを保持する配列表現があります。「d」、「b」、「c」の配列の場合、b、c、d であるはずですが、b、d、c を保持しています。これは私の追加方法です:
public boolean add (E e) {
ensureCapacity(objectCount + 1);
pq[objectCount++] = e;
//percolate up
for (int i = objectCount - 1; i >= 0; i--) {
if (priorityComparator.compare(pq[i], pq[parent(i)]) >= 0) {
E tmp = pq[parent(i)];
pq[parent(i)] = pq[i];
pq[i] = tmp;
}
}
modCount++;
return true;
}
次に「a」を追加すると、a、b、c、d に正常に変更されます。メソッドを修正して、左の子 (2*i+1) と右の子 (2*i+2) をチェックし、優先度の高いキュー (a は b よりも優先度が高く、等)?