こんにちは、javascript で最小ヒープを実装しようとしましたが、最小値を削除するためのアルゴリズムについて質問がありました。内部でヒープを表すために配列を使用しています。下に浸透している場合、停止条件はどうすればよいですか? 私のコードでは、 2 * k <= this.size にあるので、最後の要素まで移動する可能性がありますが、「正しい」とは感じません。より良い停止条件はありますか? 前もって感謝します!
this.removeMin = function () {
//replace root with last element and percolate downwards
var min = this._heap[1],
k,
left,
right;
this._heap[1] = this._heap.pop();
this.size--;
k = 1;
while ( ( 2 * k ) <= this.size) {
left = 2 * k;
right = 2 * k + 1;
if (this._heap[k] > this._heap[left] && this._heap[k] > this._heap[right]) {
if (this._heap[left] <= this._heap[right]) {
swap(this._heap, k, left);
k = left;
} else {
swap(this._heap, k, right);
k = right;
}
} else if (this._heap[k] > this._heap[left]) {
swap(this._heap, k, left);
k = left;
} else {
swap(this._heap, k, right);
k = right;
}
}
return min;
};