Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / Разные источники / Биномиальная куча (Вики).doc
Скачиваний:
40
Добавлен:
23.03.2015
Размер:
231.42 Кб
Скачать

[Править] Примеры

В качестве примера очереди с приоритетом можно рассмотреть список задач работника. Когда он заканчивает одну задачу, он переходит к очередной — самой приоритетной (ключ будет величиной, обратной приоритету) — то есть выполняет операцию 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слияния двух куч.

Содержание

 [убрать]

  • 1 Структура

  • 2 Операции

    • 2.1 Создание новой фибоначчиевой кучи

    • 2.2 Вставка узла

    • 2.3 Поиск минимального узла

    • 2.4 Объединение двух фибоначчиевых куч

    • 2.5 Извлечение минимального узла

    • 2.6 Уменьшение ключа

    • 2.7 Удаление узла

  • 3 См. также

  • 4 Ссылки

  • 5 Литература

[Править] Структура

  • Фибоначчиева куча 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].