Введение

Структура данных, функционирующая как очередь с приоритетами.

В информатике биномиальная куча — это структура данных, функционирующая как очередь с приоритетами. Она является примером объединяемой кучи (также называемой кучей слиянием), поскольку поддерживает объединение двух куч за логарифмическое время. Она реализована как куча, подобная бинарной куче, но использует специальную древовидную структуру, отличную от полных бинарных деревьев, используемых в бинарных кучах. Биномиальные кучи были изобретены в 1978 году Жаном Вуйлемэном.

Найти минимальный

Чтобы найти минимальный элемент кучи, найдите минимальное значение среди корней биномиальных деревьев. Это можно сделать за время O(log n), так как нужно проверить только корни деревьев. Используя указатель на биномиальное дерево, содержащее минимальный элемент, время выполнения этой операции можно сократить до O(1). Указатель необходимо обновлять при выполнении любой операции, кроме поиска минимума. Это можно сделать за время O(log n) на каждое обновление, не увеличивая общую асимптотическую сложность любой операции.

Ключ снижения

После уменьшения ключа элемента он может оказаться меньше ключа его родителя, нарушая свойство минимальной кучи. Если это происходит, необходимо поменять элемент местами с его родителем, а возможно, и с его дедушкой, и так далее, пока свойство минимальной кучи не будет восстановлено. Поскольку высота каждого биномиального дерева не превышает , это занимает время. Однако эта операция требует, чтобы представление дерева включало указатели от каждого узла к его родителю, что несколько усложняет реализацию других операций.

Удалить

Чтобы удалить элемент из кучи, уменьшите его ключ до отрицательной бесконечности (или, что эквивалентно, до значения, меньшего любого элемента в куче), а затем удалите минимальный элемент из кучи.