Изменения

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

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

212 байт добавлено, 02:19, 11 июня 2014
Восстановление свойств кучи
Процедура выполняется за время <tex>O(\log{N})</tex>.
<code> sift_down'''function''' siftDown(i): <font color = "green">// heap_size - количество элементов в куче</font> '''if (''' 2 * i + 1 <= A.heap_size) left = A[2 * i + 1] <font color = "green">// левый сын</font> '''else''' left = inf '''if ''' (2 * i + 2 <= A.heap_size) right = A[2 * i + 2] <font color = "green">// правый сын</font> '''else''' right = inf '''if ''' (left == right == inf) '''return''' '''if ''' (right <= left && right < A[i]) swap(A[2 * i + 2], A[i]) sift_down siftDown(2 * i + 2) '''if ''' (left < A[i]) swap(A[2 * i + 1], A[i]) sift_down siftDown(2 * i + 1)
</code>
Если значение измененного элемента уменьшается, то свойства кучи восстанавливаются функцией sift_up(i).
Процедура выполняется за время <tex>O(\log{N})</tex>.
<code> sift_up'''function''' siftUp(i): '''if (''' i == 0) '''return ''' <font color = "green">//Мы в корне<font> '''if (''' A[i] < A[i / 2]) swap(A[i], A[i / 2]); sift_up siftUp(i / 2)</code>
===Извлечение минимального элемента===
215
правок

Навигация