Балансировка троичного поискового дерева - PullRequest
8 голосов
/ 01 декабря 2010

Как можно «сбалансировать» троичное дерево поиска?Большинство реализаций tst не учитывают балансировку, но предлагают вставку в оптимальном порядке (что я не могу контролировать.)

Ответы [ 4 ]

6 голосов
/ 01 декабря 2010

В статье доктора Доббса о деревьях троичного поиска говорится: Д. Д. Слеатор и Р. Э. Тарьян описывают теоретические алгоритмы балансировки деревьев троичного поиска в "Саморегулирующихся деревьях бинарного поиска" (журнал ACM, июль1985).Вы можете найти онлайн-версии этого документа с вашей любимой поисковой системой.

2 голосов
/ 04 июля 2018

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

Это гарантирует, что каждый уровень дерева пройден в журнале (R), хотя вы, вероятно, могли бы сделать еще лучше, принимая во внимание размер подзапросов в каждом узле. Хотя это выглядит намного сложнее!

1 голос
/ 12 сентября 2012

прочитайте эту статью:

«Саморегулирование попыток троичного поиска с использованием условных вращений и рандомизированной эвристики» от «Гада Хани Бадр * и Б. Джон Ооммен †»

это поможет вам понять самонастраивающиеся и уравновешивающие TST.

1 голос
/ 01 декабря 2010

Обобщением бинарного дерева поиска является B-Tree , которое работает для разветвлений от 2 и выше.Это не единственный способ сделать это, но это распространенный способ.

Грубо, как это работает, если вставка или удаление приведут к тому, что дерево потеряет равновесие, оно украдет элемент или пространство из соседнего узла.Если даже этого недостаточно для поддержания баланса дерева, его высота будет изменена, чтобы освободить место.

...