Предпочтение между деревом AVL и деревом 2-3 - PullRequest
5 голосов
/ 04 января 2012

Может кто-нибудь сказать мне, если использование AVL предпочтительнее, чем использование дерева 2-3 или наоборот, и почему так?

Thx

Ответы [ 2 ]

3 голосов
/ 04 января 2012

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

Я также обычно предпочитаю деревья AVL хеш-таблицам. Я знаю, что ожидаемая сложность хеш-таблиц превосходит гарантированную сложность деревьев AVL, но на практике постоянные факторы делают две структуры данных в целом конкурентоспособными, и нет никаких беспокойств по поводу некоторых неожиданных данных, вызывающих плохое поведение. Кроме того, я часто нахожу, что когда-то в течение срока службы программы, в ситуации, не предусмотренной, когда первоначальный выбор хеш-таблицы казался правильным, мне нужны данные в отсортированном порядке, поэтому я в итоге переписываю программу, чтобы использовать Дерево AVL вместо хеш-таблицы; проделайте это достаточно раз, и вы узнаете, что можете начать с деревьев AVL.

Если ваши ключи являются строками, троичный поиск предлагает разумную альтернативу деревьям AVL.

0 голосов
/ 03 января 2017

AVL Tree

Дерево AVL - это самобалансирующееся бинарное дерево поиска, изобретенное Дж. М. Адельсоном-Вельским и Э. М. Ландисином в 1962 г. Дерево названо AVL в честь его изобретателей. В дереве AVL высоты двух поддеревьев узла могут отличаться не более чем на единицу. Благодаря этому свойству дерево AVL также известно как дерево с сбалансированной высотой.

2–3 Дерево

В дереве 2-3 у каждого внутреннего узла есть два или три дочерних элемента. Узлы с двумя потомками называются 2-узлами. 2-узлы имеют одно значение данных и два дочерних Узлы с тремя детьми называются 3-узлами. У 3-узлов есть два значения данных и три дочерних элемента (левый, средний и правый дочерние элементы)

Пример: 2-3 Дерево

Это означает, что дерево 2-3 не является двоичным деревом. В этом дереве все узлы листьев находятся на одном уровне (нижний уровень).

Здесь вы можете найти разницу между почти всеми видами деревьев в структуре данных ... https://knowshares.wordpress.com/2017/01/01/difference-binary-binarysearch-avl-2-3-b-trees/

...