на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Поисковые деревья
Упражнения
- Предположим, что корень красно-черного дерева красный. Если мы покрасим его в черный цвет, останется ли дерево красно-черным?
- Покажите, что самый длинный путь вниз от вершины
к листу не более чем вдвое длиннее самого короткого такого пути.
- Какое наибольшее и наименьшее количество внутренних узлов может быть
в красно-черном дереве черной высоты
Вращения — это манипуляции
с красно-черными деревьями с целью
восстановления RB-свойств в случае их нарушения. Их используют при
реализации операций и
.
Вращение представляет собой локальную операцию, при которой меняется несколько указателей,
но свойство упорядоченности сохраняется.
На рис. 10.1 показаны два взаимно обратных вращения: левое и правое.
Левое вращение возможно в
любом узле , правый ребенок
которого (назовем его
) не является листом (
). После вращения
оказывается корнем
поддерева,
— левым ребенком
узла
, а бывший левый ребенок
— правым
ребенком узла
.
Упражнения
- Покажите, что левое и правое вращения можно
осуществить за время
.
- Напишите процедуры
и
, реализующие левое и правое вращение в дереве
относительно узла
.
- Пусть
,
и
— произвольные узлы в поддеревьях
,
и
на рис. 10.1 (справа). Как изменится глубина
,
и
при выполнении левого вращения?
- Покажите, что произвольное двоичное дерево поиска с
узлами может быть преобразовано в любое другое дерево с тем же числом узлов (и теми же ключами) с помощью
вращений. (Указание: сначала покажите, что
правых вращений достаточно, чтобы преобразовать любое дерево в идущую вправо цепочку.)
- Напишите процедуры Insert ( T, x ) и Delete ( T, x ), которые добавляют и удаляют элемент x из дерева T за время
.
- Разработайте алгоритм объединения двух красно-черных деревьев в одно
красно-черное дерево за время
.
АВЛ-деревья
АВЛ-балансировка по определению требует, чтобы для каждого узла высота его правого поддерева отличалась от высоты левого не более чем на единицу.
Пусть — минимальное число узлов в АВЛ-дереве
высоты
.
Тогда
,
,
,
при
.
Теорема.
Для любого выполняется неравенство
,
где
— положительный корень
уравнения
.
Доказательство.
Непосредственно проверяется базис индукции ,
. Предположим теперь, что при
выполняется неравенство
,
и докажем его при
.
Действительно,
. Докажем последнее в этой цепочке
неравенство.
Пусть ,
тогда
и, следовательно,
.
Получили противоречие
.
Следствие.
Для любого АВЛ-дерева высоты с
узлами
выполняется соотношение
, что обеспечивает "логарифмическую
трудоемкость" выполнения основных операций с АВЛ-деревом.
Идея балансировки двоичных деревьев поиска принадлежит\linebreak
Г.М.Адельсону-Вельскому и Е.М.Ландису, предложившим в 1962 г. класс
сбалансированных деревьев, называемых с тех пор АВЛ-деревьями. Баланс
поддерживается с помощью процедуры вращения. Для его восстановления
в дереве с узлами после добавления или удаления узла может
потребоваться
вращений.
Еще один класс деревьев поиска,
называемых -
-деревьями, был предложен
Дж. Хопкрофтом в 1970 г. Здесь баланс поддерживается за счет изменения
степеней узлов. Обобщение
-
-деревьев предложили
Д.Байер и Е.Мак-Крейт.
Их деревья называются Б-деревьями, которые мы рассмотрим в следующем разделе.
Красно-черные деревья предложил Д.Байер, назвав их симметричными двоичными Б-деревьями. Л.Гибас подробно изучил их свойства и предложил использовать для наглядности красный и черный цвета Посмотрите [7].
Из многих других вариаций на тему сбалансированных деревьев наиболее
интересны расширяющиеся деревья, которые придумали Д.Слеатор и Р.Тарьян.
Эти деревья являются саморегулирующимися. Хорошее описание расширяющихся
деревьев дал Тарьян. Расширяющиеся деревья поддерживают баланс без
использования дополнительных полей (типа цвета). Вместо этого расширяющие
операции, включающие вращения, выполняются при каждом обращении к дереву.
Учетная стоимость в расчете на одну операцию с деревом для расширяющихся
деревьев составляет .