Привет, я попытался реализовать минимальную кучу в javascript, но у меня возник вопрос относительно алгоритма удаления min. Я использую массив для внутреннего представления кучи. Когда я просачиваюсь вниз, каким должно быть условие остановки? В моем коде он равен 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;
};