2015-02-23 2 views
1

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

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

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

+1

Дерево B не является двоичным деревом. – amit

+0

(В примере на geeksforgeeks (второй [ЗДЕСЬ] (http://www.geeksforgeeks.org/b-tree-set-1-insert-2/) диаграмма «после вставки 90» кажется удачной.) Существует [2-3 дерева] (http://en.wikipedia.org/wiki/2%E2%80%933_tree) - посмотрите на удаления там и на деревьях B тоже. – greybeard

+0

@greybeard Они не бинарные деревья. – amit

ответ

3

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

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

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

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

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

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

+0

Привет, Templatetypedef, вы очень помогли. Просто последнее, в примере здесь - http://www.geeksforgeeks.org/b-tree-set-1-insert-2/ ... I я не могу понять, как вставлен «90». Можете ли вы любезно взглянуть на него. – Andy897

Смежные вопросы