2–3 кучи

В информатике куча 2–3 — это структура данных , вариация кучи , разработанная Тадао Такаокой в ​​1999 году. Структура похожа на кучу Фибоначчи и заимствована из дерева 2–3 .

Временные затраты на некоторые общие операции с кучей следующие:

  • Удаление-мин занимает амортизированное время . О ( бревно ( н ) ) {\displaystyle O(\log(n))}
  • Уменьшение клавиши занимает постоянное амортизированное время.
  • Вставка занимает постоянное амортизированное время.

Многочлен деревьев

Источник: [1]

Линейное дерево размера представляет собой последовательный путь узлов с первым узлом в качестве корня дерева и представлено жирным шрифтом (например, является линейным деревом из одного узла). Произведение двух деревьев и , представляет собой новое дерево, в котором каждый узел заменяется копией и для каждого ребра мы соединяем корни деревьев, соответствующие конечным точкам ребра. Обратите внимание, что это определение произведения является ассоциативным, но не коммутативным. Сумма двух деревьев и представляет собой совокупность двух деревьев и . г {\displaystyle r} г {\displaystyle r} г {\displaystyle \mathbf {r} } 1 {\displaystyle \mathbf {1} } П = С Т {\displaystyle P=ST} С {\displaystyle S} Т {\displaystyle Т} С {\displaystyle S} Т {\displaystyle Т} С {\displaystyle S} С + Т {\displaystyle S+T} С {\displaystyle S} Т {\displaystyle Т} С {\displaystyle S} Т {\displaystyle Т}

R-арный многочлен деревьев определяется как , где . Эта полиномиальная нотация для деревьев узлов уникальна. Дерево фактически является копией , корни которой соединены с ребрами последовательно, а путь этих ребер называется основным стволом дерева . Кроме того, r-арный многочлен деревьев называется r-номиальной очередью, если узлы многочлена деревьев связаны с ключами в свойстве кучи. П = а к 1 г к 1 + + а 1 г + а 0 {\displaystyle P=\mathbf {a} _{k-1}\mathbf {r} ^{k-1}+\dots +\mathbf {a} _{1}\mathbf {r} +\mathbf {a} _{0}} 0 а я г 1 {\displaystyle 0\leq a_{i}\leq r-1} н {\displaystyle n} а я г я {\displaystyle \mathbf {a} _{i}\mathbf {r} ^{i}} а я {\displaystyle a_{i}} г я {\displaystyle \mathbf {г} ^{я}} а я 1 {\displaystyle a_{i}-1} а я 1 {\displaystyle a_{i}-1} а я г я {\displaystyle \mathbf {a} _{i}\mathbf {r} ^{i}}

Операции над r-номинальными очередями

Чтобы объединить два термина формы и , мы просто переупорядочиваем деревья в главном стволе на основе ключей в корне деревьев. Если у нас будет термин формы и дерево переноса . В противном случае у нас будет только дерево . Таким образом, сумма двух r-номиальных очередей фактически аналогична сложению двух чисел в базе . а я г я {\displaystyle \mathbf {a} _{i}\mathbf {r} ^{i}} а я г я {\displaystyle \mathbf {a} '_{i}\mathbf {r} ^{i}} а я + а я г {\displaystyle a_{i}+a'_{i}\geq r} ( а я + а я г ) г я {\displaystyle (\mathbf {a} _{i}+\mathbf {a} '_{i}-\mathbf {r} )\mathbf {r} ^{i}} г я + 1 {\displaystyle \mathbf {r} ^{i+1}} ( а я + а я ) г я {\displaystyle (\mathbf {a} _{i}+\mathbf {a} '_{i})\mathbf {r} ^{i}} г {\displaystyle r}

Вставка ключа в полиномиальную очередь подобна слиянию одного узла с меткой ключа в существующую r-номиальную очередь, что требует времени . О ( г бревно г н ) {\displaystyle O(r\log _{r}{n})}

Чтобы удалить минимум, сначала нам нужно найти минимум в корне дерева, скажем , , затем мы удаляем минимум из и добавляем полученную полиномиальную очередь к за общее время . Т {\displaystyle Т} Т {\displaystyle Т} В {\displaystyle Q} П Т {\displaystyle PT} О ( г бревно г н ) {\displaystyle O(r\log _{r}{n})}

(2,3)-куча

Источник: [1]

Дерево определяется рекурсивно с помощью for ( находится между и и операции оцениваются справа налево), где для двух деревьев и результатом операции является соединение корня как самого правого потомка с корнем и является деревом с одним узлом. Обратите внимание, что корень дерева имеет степень . ( л , г ) {\displaystyle (л,р)-} Т ( я ) {\displaystyle T(i)} Т ( я ) = Т 1 ( я 1 ) Т с ( я 1 ) {\displaystyle T(i)=T_{1}(i-1)\triangleleft \dots \triangleleft T_{s}(i-1)} я 1 {\displaystyle i\geq 1} с {\displaystyle с} л {\displaystyle л} г {\displaystyle r} ( с 1 ) {\displaystyle (с-1)} {\displaystyle \треугольниклевый} А {\displaystyle А} Б {\displaystyle Б} А Б {\displaystyle A\triangleleft B} Б {\displaystyle Б} А {\displaystyle А} Т ( 0 ) {\displaystyle Т(0)} Т ( я ) {\displaystyle T(i)} я {\displaystyle я}

Расширенный многочлен деревьев, , определяется как . Если мы назначаем ключи узлам расширенного многочлена деревьев в порядке кучи, он называется , а особый случай и называется . П {\displaystyle P} П = а к 1 Т ( к 1 ) + + а 1 Т ( 1 ) + а 0 {\displaystyle P=a_{k-1}T(k-1)+\dots +a_{1}T(1)+a_{0}} ( л , г ) час е а п {\displaystyle (l,r)-куча} л = 2 {\displaystyle l=2} г = 3 {\displaystyle r=3} ( 2 , 3 ) h e a p {\displaystyle (2,3)-heap}

Операции над (2,3)-кучей

Delete-min : Сначала найдите минимум, просматривая корень деревьев. Пусть будет деревом, содержащим минимальный элемент, а пусть будет результатом удаления корня из . Затем выполните слияние и (Операция слияния похожа на слияние двух r-номиальных очередей ). T ( i ) {\displaystyle T(i)} Q {\displaystyle Q} T ( i ) {\displaystyle T(i)} P T ( i ) {\displaystyle P-T(i)} Q {\displaystyle Q}

Вставка : Чтобы вставить новый ключ, объедините существующую (2,3)-кучу с деревом с одним узлом, помеченным этим ключом. T ( 0 ) {\displaystyle T(0)}

Клавиша уменьшения : Будет сделано!

Ссылки

  1. ^ ab Takaoka, Tadao (март 2003 г.). «Теория 2–3 куч». Дискретная прикладная математика . 126 (1): 115– 128. doi : 10.1016/S0166-218X(02)00219-6 .
Retrieved from "https://en.wikipedia.org/w/index.php?title=2–3_heap&oldid=1223687663"