В чем разница между бинарными кучами и биномиальными кучами? - PullRequest
16 голосов
/ 02 июня 2011

Мне нужно знать основное различие между двоичными и биномиальными кучами, независимо от разницы их структуры, что двоичные кучи могут иметь только два дочерних (древовидное представление), а биномиальные кучи могут иметь любое количество дочерних элементов.

Iна самом деле мне просто интересно, что такого особенного в организации биномиальной древовидной структуры таким образом, что у первого потомка на одном узле у второго есть у двух третьих есть четыре и так далее?

Что если, если мы используем некоторые нормальныедерево для куч без ограничения двух дочерних элементов, а затем применить процедуру объединения и просто сделать одну кучу левым дочерним элементом других куч?

Ответы [ 3 ]

20 голосов
/ 08 февраля 2012

Ключевое различие между двоичной кучей и биномиальной кучей состоит в том, как структурированы кучи.В двоичной куче куча представляет собой одно дерево, которое представляет собой полное двоичное дерево.В биномиальной куче куча представляет собой коллекцию деревьев меньшего размера (то есть лес деревьев), каждое из которых является биномиальным деревом.Полное двоичное дерево может быть построено для хранения любого количества элементов, но количество элементов в биномиальном дереве некоторого порядка n равно всегда 2 n .Следовательно, нам нужно только одно полное двоичное дерево для резервного копирования двоичной кучи, но нам может потребоваться несколько биномиальных деревьев для резервного копирования биномиальной кучи.Интересно, что порядки биномиальных деревьев, используемых в биномиальной куче, соответствуют 1 битам, установленным в двоичном представлении числа элементов в лесу.

Причина организации биномиальных куч в том виде, в каком они есть, заключается в том, чтобиномиальное дерево порядка n всегда содержит ровно 2 n узлов.Это позволяет нам делать предположения о количестве элементов в биномиальном дереве без фактической проверки структуры этого дерева.С другой стороны, полное двоичное дерево некоторой высоты h может иметь переменное число узлов в нем в зависимости от того, как заполнена последняя строка.Тот факт, что каждый из дочерних элементов должен иметь очень точно определенную структуру, также может быть использован для доказательства того, что число дочерних элементов не превышает O (log n), где n - общее количество узлов в куче, что означает, чтостоимость delete-min не слишком велика.

Важной деталью этого является то, что биноминальная куча не любого дерева, в котором есть k дочерних элементов.Это дерево строго определено как

  • Биномиальное дерево порядка 0 - это один узел, а
  • Биномиальное дерево порядка n - это один узел с биномиальными деревьями порядка 0, 1, 2, ..., n - 1 как дети.

(Технически, особый случай порядка 0 здесь не нужен).Вы можете увидеть это здесь:

Binomial trees!

Обратите внимание, что существует точно одно дерево каждого ордера, без какой-либо гибкости в количестве или позицииузлы.

Однако важным альтернативным определением является следующее:

  • Биномиальное дерево порядка 0 - это один узел, а
  • Биномиальное дерево порядкаn - это два биномиальных дерева порядка n - 1, причем одно из них стало дочерним для другого.

(найдите минутку, чтобы понять, почему они эквивалентны).Используя это второе определение, можно быстро доказать, что число узлов в дереве равно 2 n .В качестве базового случая, дерево порядка 0 имеет 2 0 = 1 узел по мере необходимости.Для индуктивного шага, если у нас есть два дерева порядка n - 1, они вместе имеют 2 n-1 + 2 n-1 = 2 n узловкак требуется.Таким образом, общее количество узлов в биномиальном дереве порядка n равно 2 n .

Идея кучи, которую вы описываете в своем последнем абзаце, не всегда приводит кэффективное время выполнения.В частности, если у вас есть деревья с огромным коэффициентом ветвления и без других структурных ограничений, то теоретически вы можете построить кучу из n узлов, состоящих из одного узла с (n - 1) дочерними элементами.В этом случае после удаления минимального элемента из кучи вам нужно будет просмотреть все n - 1 дочерних элементов, чтобы определить, какой был новый минимум, и дать время выполнения O (n).Другие структурные ограничения на деревья, такие как полные двоичные деревья, биномиальные деревья и т. Д., Гарантируют, что этот наихудший случай не произойдет.

Надеюсь, это поможет!

2 голосов
/ 08 февраля 2012

Двоичная куча может быть создана путем соединения любых двух дочерних полных двоичных деревьев одного ранга с корневым узлом.Это дерево с немного свободным стилем - некоторые листья могут быть срезаны справа

Биномиальное дерево ранга N - это , а не лес деревьев.Это корневой узел, к которому подключено биномиальных деревьев ранга N-1, N-2, ..., 1,0.Биноминальная куча - это дерево с абсолютно фиксированной структурой.

(боюсь, кто-то неправильно прочитал Wiki.) У биномиального дерева порядка k есть корневой узел, чьи дети являются корнями биномиальных деревьев порядка k − 1, k − 2, ..., 2, 1, 0 (в этом порядке).

0 голосов
/ 02 января 2018

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

╔══════════════╦═══════════════════════╦════════════════════════╗
║  Operation   ║       Binary          ║      Binomial          ║
╠══════════════╬═══════════════════════╬════════════════════════╣
║              ║                       ║                        ║                              
║   insert     ║      O(logN)          ║      O(logN)           ║
║              ║                       ║                        ║                              
╠══════════════╬═══════════════════════╬════════════════════════╣
║  find Min    ║       O(1)            ║      O(logN)           ║
║              ║                       ║                        ║
╠══════════════╬═══════════════════════╬════════════════════════╣
║              ║                       ║                        ║
║   Revmove    ║       O(logN)         ║      O(logN)           ║
║              ║                       ║                        ║
╠══════════════╬═══════════════════════╬════════════════════════╣
║              ║                       ║                        ║
║ Decrease Key ║       O(logN)         ║      O(logN)           ║
║              ║                       ║                        ║
╠══════════════╬═══════════════════════╬════════════════════════╣
║              ║                       ║                        ║
║    Union     ║         O(N)          ║      O(logN)           ║
║              ║                       ║                        ║
╠══════════════╬═══════════════════════╬════════════════════════╣
║              ║ ■ Min element is root ║order k binomial tree Bk║
║              ║ ■ Heap height = logN  ║ ■ Number of nodes = 2k.║
║              ║                       ║ ■ Height = k.          ║                  
║              ║                       ║ ■ Degree of root = k.  ║
║  Useful      ║                       ║ ■ Deleting root yields ║
║  Properties  ║                       ║   binomial trees       ║
║              ║                       ║   Bk-1, … , B0.        ║
║              ║                       ║   (see graph below)    ║
║              ║                       ║                        ║
║              ║                       ║                        ║
║              ║                       ║                        ║
║              ║                       ║                        ║        
╚══════════════╩═══════════════════════╩════════════════════════╝

Я получил это изображение с Принстонских слайдов лекций

Binary Heap: (почти полное двоичное дерево) Binary Heap

Биноминальная куча:

enter image description here k bonomial trees

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...