Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив3 / kursach(7) / курсач / Документ Microsoft Office Word.docx
Скачиваний:
11
Добавлен:
07.08.2013
Размер:
63.1 Кб
Скачать

[ Править ]Теория

Бинарное дерево поиска называется весом сбалансированным, если половина узлов слева от корня, и половина справа. Α-вес сбалансирован, следовательно, определены как отвечающие следующим условиям:

Размер (слева) <= α * размер (узел)

Размер (справа) <= α * размер (узел)

Если размер может быть определен рекурсивно, как:

Функция размера (узел)

Если узел = ноль

возвращать 0

еще

возвращение размера (узел-> левый) + размер (узел-> правый) + 1

конец

Α из 1 Поэтому было бы описать как связанный список сбалансированным, в то время как α в 0,5 будет соответствовать только почти полное бинарных деревьев .

Бинарное дерево поиска, которое является α-вес сбалансирован также должны быть α-высота-сбалансированным , то есть

Высота (дерево) <= Журнал 1 / α (NodeCount)

Козел отпущения деревья не гарантированно сохранить α-вес-баланс во все времена, но всегда слабо α-высота-баланса в том, что

Высота (козла отпущения дерево) <= Журнал 1 / α (NodeCount) + 1

Это делает козлом отпущения деревья похожи на красно-черные деревья в том, что они оба имеют ограничения на их высоту. Они сильно отличаются, хотя в их реализации определить, где повороты (или в случае козлом отпущения деревьев, балансировку) имеют место. В то время как красно-черные деревья хранят информацию дополнительный "цвет" в каждом узле, чтобы определить местоположение, найти козла отпущения деревьев козла отпущения, который не является α-вес сбалансирован для выполнения операций на баланс. Это слабо похоже на AVL деревья , в том, что фактические вращений зависит от "остатков" узлов, а средство определения баланса существенно отличается. С AVL деревья проверить балансовой стоимости на каждый вставки / удаления, она обычно хранится в каждом узле; козла отпущения деревья способны вычислить его только по мере необходимости, которая является только тогда, когда козлом отпущения должно быть найдено.

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

[ Править ]Операции [ править ]Вставка

Размещение осуществляется с теми же основными идеями, как несбалансированное бинарное дерево поиска , однако с несколько существенных изменений.

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

Чтобы восстановить баланс, все поддерево с корнем в козла отпущения подвергается балансировке работы. Козлом отпущения определяется как предок вставлен узел, который не является α-вес сбалансирован. Там всегда будет по крайней мере один такой предка.Восстановление равновесия любой из них будет восстановить α-высота-сбалансированным собственности.

Один из способов найти козла отпущения, это забраться на новый узел обратно до корня и выбрать первый узел, который не α-вес сбалансирован.

Восхождение обратно до корня требует O (журнал N ) памяти, как правило, выделяется в стеке, или родитель указателей. Это действительно может избежать, указывая на каждого ребенка на его родителей, как вы идете вниз, и ремонт на прогулку обратно.

Чтобы определить, является ли потенциальный узел является жизнеспособным козла отпущения, мы должны проверить ее α-вес сбалансирован собственности. Для этого мы можем вернуться к определению:

Размер (слева) <= α * размер (узел)

Размер (справа) <= α * размер (узел)

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

Рассмотрим следующий пример, чтобы продемонстрировать это. Предполагая, что мы поднимаясь до корня:

Размер (родителя) = размер (узел) + размера (братом) + 1

Но, как:

Размер (вставляется узел) = 1.

Дело тривиализуется до:

Размер [х +1] = размере [х] + размера (братом) + 1

Где х = этот узел, х + 1 = родителя и размер (брат) является единственной функцией, вызов на самом деле требуется.

После отпущения найден, поддерево с корнем в козла отпущения полностью перестроены, чтобы быть идеально сбалансированным. [ 2 ] Это может быть сделано в O ( N ) времени на перемещения узлов поддерева, чтобы найти их значения в определенном порядке и рекурсивно выборе Средний качестве корня поддерева.

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

Соседние файлы в папке курсач