Изменения

Перейти к: навигация, поиск

Двоичная куча

4 байта убрано, 05:13, 6 апреля 2011
Нет описания правки
Если в куче изменяется один из элементов, то она может перестать удовлетворять свойству упорядоченности. Для восстановления этого свойства служат процедуры '''Shift_Down''' (просеивание вниз) и '''Shift_Up''' (просеивание вверх). Если значение измененного элемента увеличивается, то свойства кучи восстанавливаются функцией '''Shift_Down(i)'''.
Работа процедуры : если <tex>i</tex>-й элемент большеменьше, чем его сыновья, всё поддерево уже является кучей, и делать ничего не надо. В противном случае меняем местами <tex>i</tex>-й элемент с наибольшим наименьшим из его сыновей, после чего выполняем '''Shift_Down(i)''' для этого сына.
Процедура выполняется за время <tex>O(\log{N})</tex>.
min = i
If (min <> i)
Поменять A[i] и A[largestminimum] Shift_Down(A, min)
</code>
Если значение измененного элемента уменьшается, то свойства кучи восстанавливаются функцией'''Shift_Up(i)'''.
Insert(key)
A.heap_size = A.heap_size + 1
A[A.heap_size] = key;
Shift_Up(A.heap_size)
</code>
Анонимный участник

Навигация