Эта статья может быть слишком технической для понимания большинства читателей . ( Апрель 2024 ) |
Эта статья в значительной степени или полностью основана на одном источнике . ( май 2024 г. ) |
В информатике куча 2–3 — это структура данных , вариация кучи , разработанная Тадао Такаокой в 1999 году. Структура похожа на кучу Фибоначчи и заимствована из дерева 2–3 .
Временные затраты на некоторые общие операции с кучей следующие:
Источник: [1]
Линейное дерево размера представляет собой последовательный путь узлов с первым узлом в качестве корня дерева и представлено жирным шрифтом (например, является линейным деревом из одного узла). Произведение двух деревьев и , представляет собой новое дерево, в котором каждый узел заменяется копией и для каждого ребра мы соединяем корни деревьев, соответствующие конечным точкам ребра. Обратите внимание, что это определение произведения является ассоциативным, но не коммутативным. Сумма двух деревьев и представляет собой совокупность двух деревьев и .
R-арный многочлен деревьев определяется как , где . Эта полиномиальная нотация для деревьев узлов уникальна. Дерево фактически является копией , корни которой соединены с ребрами последовательно, а путь этих ребер называется основным стволом дерева . Кроме того, r-арный многочлен деревьев называется r-номиальной очередью, если узлы многочлена деревьев связаны с ключами в свойстве кучи.
Чтобы объединить два термина формы и , мы просто переупорядочиваем деревья в главном стволе на основе ключей в корне деревьев. Если у нас будет термин формы и дерево переноса . В противном случае у нас будет только дерево . Таким образом, сумма двух r-номиальных очередей фактически аналогична сложению двух чисел в базе .
Вставка ключа в полиномиальную очередь подобна слиянию одного узла с меткой ключа в существующую r-номиальную очередь, что требует времени .
Чтобы удалить минимум, сначала нам нужно найти минимум в корне дерева, скажем , , затем мы удаляем минимум из и добавляем полученную полиномиальную очередь к за общее время .
Источник: [1]
Дерево определяется рекурсивно с помощью for ( находится между и и операции оцениваются справа налево), где для двух деревьев и результатом операции является соединение корня как самого правого потомка с корнем и является деревом с одним узлом. Обратите внимание, что корень дерева имеет степень .
Расширенный многочлен деревьев, , определяется как . Если мы назначаем ключи узлам расширенного многочлена деревьев в порядке кучи, он называется , а особый случай и называется .
Delete-min : Сначала найдите минимум, просматривая корень деревьев. Пусть будет деревом, содержащим минимальный элемент, а пусть будет результатом удаления корня из . Затем выполните слияние и (Операция слияния похожа на слияние двух r-номиальных очередей ).
Вставка : Чтобы вставить новый ключ, объедините существующую (2,3)-кучу с деревом с одним узлом, помеченным этим ключом.
Клавиша уменьшения : Будет сделано!