Изменения

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

Фибоначчиева куча

76 байт убрано, 11:37, 21 мая 2015
Структура
'''int''' degree <span style="color:#008000">// количество дочерних узлов</span>
'''boolean''' mark <span style="color:#008000">// флаг, который показывает, удаляли ли мы дочерние узлы данной вершины</span>
====Структура кучи====
'''struct''' Heap
'''int''' size <span style="color:#008000">// текущее количество узлов</span>
'''Node''' min <span style="color:#008000">// указатель на корень дерева с минимальным ключом</span>
====Структура списка детей====
[[File:Fibonacci-heap.png|thumb|340px|Пример фибоначчиевой кучи]]
* Дочерние узлы <tex>x</tex> объединены при помощи указателей <tex>left</tex> и <tex>right</tex> в циклический двусвязный список.
* Корни всех деревьев в <tex>H</tex> связаны при помощи указателей <tex>left</tex> и <tex>right</tex> в циклический двусвязный список корней.
* Обращение к <tex>H</tex> выполняется посредством указателя <tex>H.min</tex> на корень дерева с минимальным ключом. Этот узел называется минимальным узлом <tex>H</tex>.
* Текущее количество узлов в <tex>H</tex> хранится в <tex>H.size</tex>.
Циклический двусвязный список обладает двумя преимуществами для использования в фибоначчиевых кучах. Во-первых, удаление элемента из такого списка выполняется за время <tex>O(1)</tex>. Во-вторых, если имеется два таких списка, их легко объединить в один за время <tex>O(1)</tex>.
Анонимный участник

Навигация