Изменения

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

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

6 байт убрано, 17:19, 9 марта 2012
Структура
[[File:Fibonacci-heap.png|thumb|300px|Пример фибоначчиевой кучи]]
* Каждый узел <tex>x</tex> в куче <tex>H</tex> содержит следующие указатели и поля:
** <tex>x.key[x]</tex> — поле, в котором хранится ключ;** <tex>x.p[x]</tex> — указатель на родительский узел;** <tex>x.child[x]</tex> — указатель на один из дочерних узлов;** <tex>x.left[x]</tex> — указатель на левый сестринский узел;** <tex>x.right[x]</tex> — указатель на правый сестринский узел;** <tex>x.degree[x]</tex> — поле, в котором хранится количество дочерних узлов;** <tex>x.mark[x]</tex> — логическое значение, которое указывает, были ли потери узлом <tex>x</tex> дочерних узлов, начиная с момента, когда <tex>x</tex> стал дочерним узлом какого-то другого узла.
* Дочерние узлы <tex>x</tex> объединены при помощи указателей <tex>left</tex> и <tex>right</tex> в циклический двусвязный список.
* Корни всех деревьев в <tex>H</tex> связаны при помощи указателей <tex>left</tex> и <tex>right</tex> в циклический двусвязный список корней.
* Обращение к <tex>H</tex> выполняется посредством указателя <tex>H.min[H]</tex> на корень дерева с минимальным ключом. Этот узел называется минимальным узлом <tex>H</tex>.* Текущее количество узлов в <tex>H</tex> хранится в <tex>n[H].size</tex>.
Циклический двусвязный список обладает двумя преимуществами для использования в фибоначчиевых кучах. Во-первых, удаление элемента из такого списка выполняется за время <tex>O(1)</tex>. Во-вторых, если имеется два таких списка, их легко объединить в один за то время <tex>O(1)</tex>.
403
правки

Навигация