Уравновешивание avl-дерева без поворотов

B Tree - это самобалансирующееся дерево, подобное AVL-дереву. ЗДЕСЬ мы можем увидеть, как вращение влево и вправо используется для сохранения AVL дерево сбалансировано.

И ЗДЕСЬ - это ссылка, объясняющая вставку в B-дерево. Эта техника вставки не требует вращения, если я не ошибаюсь, чтобы дерево оставалось сбалансированным. А потому и выглядит проще.

Вопрос: Есть ли какой-либо подобный (или любой другой метод без использования вращений) для сохранения баланса avl-дерева?


person Andy897    schedule 23.02.2015    source источник
comment
B-дерево не является двоичным деревом.   -  person amit    schedule 23.02.2015
comment
(В примере на geeksforgeeks (2-й ЗДЕСЬ) диаграмма после вставки 90 кажется не в порядке.) Есть 2-3 дерева - посмотрите на удаления там и в B-деревьях.   -  person greybeard    schedule 23.02.2015
comment
@greybeard Это не бинарные деревья.   -  person amit    schedule 23.02.2015


Ответы (1)


Ответ и да и нет.

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

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

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

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

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

person templatetypedef    schedule 23.02.2015
comment
Привет, Templatetypedef, вы очень помогли. И последнее, в приведенном здесь примере - geeksforgeeks.org/b -tree-set-1-insert-2 ... Я не могу понять, как вставляется 90. Не могли бы вы взглянуть на это. - person Andy897; 24.02.2015