- •Биномиальная куча
- •Двоичная куча
- •[Править] Функциональность
- •[Править] Базовые процедуры
- •[Править] Восстановление свойств кучи
- •[Править] Построение кучи
- •[Править] Пирамидальная сортировка
- •[Править] Изменение значения элемента
- •[Править] Добавление элемента
- •[Править] Извлечение максимального элемента
- •Очередь с приоритетом
- •[Править] Примеры
- •[Править] Расширения очереди с приоритетом
- •Фибоначчиева куча
- •[Править] Структура
- •[Править] Операции
- •[Править] Уменьшение ключа
- •[Править] Удаление узла
[Править] Примеры
В качестве примера очереди с приоритетом можно рассмотреть список задач работника. Когда он заканчивает одну задачу, он переходит к очередной — самой приоритетной (ключ будет величиной, обратной приоритету) — то есть выполняет операцию EXTRACT_MIN.
Начальник добавляет задачи в список, указывая их приоритет, то есть выполняет операцию INSERT.
[Править] Расширения очереди с приоритетом
Различные реализации очереди с приоритетом нередко расширяют её интерфейс следующими операциями:
DELETE(k)— удалить пару с ключомk;
CHANGE_KEY(k, k_new)— в первой паре с ключомkзаменить ключ наk_new;
UNION(queue1, queue2)— из двух очередей с приоритетом сделать одну, объединив множества хранимых в них пар.
Фибоначчиева куча
[править]
Материал из Википедии — свободной энциклопедии
У этого термина существуют и другие значения, см. Куча (значения).
Фибоначчиева куча(англ.Fibonacci heap) —структура данных, представляющая собой набордеревьев, упорядоченных в соответствии со свойством неубывающей пирамиды. Фибоначчиевы кучи были введены Майклом Фредманом иРобертом Тарьяномв1984году.
Структура является реализацией абстрактного типа данных«Очередь с приоритетом», и замечательна тем, что операции, в которых не требуется удаление, имеют амортизированное время работы, равноеO(1) (длядвоичной кучиибиномиальной кучиамортизационное время работы равноO(logn)). Кроме стандартных операцийINSERT,MIN,EXTRACT-MINфибоначчиева куча позволяет за времяO(1) выполнять операциюUNIONслияния двух куч.
Содержание [убрать]
|
[Править] Структура
Фибоначчиева куча Hпредставляет собой набордеревьев.
Каждое дерево в Hподчиняется свойству неубывающей пирамиды (англ.min-heap property): ключ узла не меньше ключа его родительского узла.
Каждый узел xвHсодержит следующие указатели и поля:
key[x] — поле, в котором хранится ключ;
p[x] — указатель на родительский узел;
child[x] — указатель на один из дочерних узлов;
left[x] — указатель на левый сестринский узел;
right[x] — указатель на правый сестринский узел;
degree[x] — поле, в котором хранится количество дочерних узлов;
mark[x] — логическое значение, которое указывает, были ли потери узломxдочерних узлов, начиная с момента, когдаxстал дочерним узлом какого-то другого узла.
Дочерние узлы xобъединены при помощи указателейleftиrightв один циклический дважды связанный список дочерних узлов (англ.child list)x.
Корни всех деревьев в Hсвязаны при помощи указателейleftиrightв циклический дважды связанный список корней (англ.root list).
Обращение к Hвыполняется посредством указателяmin[H] на корень дерева с минимальным ключом. Этот узел называется минимальным узлом (англ.minimum node)H.
Текущее количество узлов в Hхранится вn[H].