на стр 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].
Из многих других вариаций на тему сбалансированных деревьев наиболее интересны расширяющиеся деревья, которые придумали Д.Слеатор и Р.Тарьян. Эти деревья являются саморегулирующимися. Хорошее описание расширяющихся деревьев дал Тарьян. Расширяющиеся деревья поддерживают баланс без использования дополнительных полей (типа цвета). Вместо этого расширяющие операции, включающие вращения, выполняются при каждом обращении к дереву. Учетная стоимость в расчете на одну операцию с деревом для расширяющихся деревьев составляет .