Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

Глава 10. Деревья поиска

Мы можем сделать красно-черное определение дерева более интуитивным, отметив интерес - корреспонденцию луга между красно-черными деревьями и (2, 4) деревья, как иллюстрировано в Фиге - ure 10.28. А именно, учитывая красно-черное дерево, мы можем построить передачу (2, 4) дерево, слив каждый красный узел v в его родителя и храня вход от v в его родителе. С другой стороны мы можем преобразовать любого (2, 4) дерево в соответствующее красно-черное дерево, окрасив каждый узел черным и выполнив следующее преобразование для каждого внутреннего узла v:

• Если v - с 2 узлами, то держите (темнокожих) детей v, как

• Если v - с 3 узлами, то создайте новый красный узел w, дайте первые два (черных) v

дети к w, и заставляют w и третьего ребенка v быть двумя детьми v

• Если v - с 4 узлами, то создайте два новых красных узла w и z, дайте первые два v

(темнокожие) дети к w, дайте последним двум (темнокожим) детям v z и сделайте w и

z быть двумя детьми v

-®

(a)

-®

(b)

-®

(c)

Рисунок 10.28: Корреспонденция между (2, 4) дерево и красно-черное дерево: (a) с 2 узлами;

(b) С 3 узлами; (c) с 4 узлами.

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

10.5. Красно-черные деревья 475

Суждение 10.9: высота красно-черного дерева, хранящего n записи, является O (зарегистрируйте n).

Оправдание: Позвольте T быть красно-черным деревом, хранящим n записи и позволить h быть высотой T. Мы оправдываем это суждение, устанавливая следующий факт

регистрация (n + 1)£ hрегистрация за 2£ (n + 1). Позвольте d быть общей черной глубиной всех внешних узлов T. Позвольте T быть

(2, 4) дерево связалось с T, и позвольте h быть высотой T. Из-за corre-spondence между красно-черными деревьями и (2, 4) деревья, мы знаем что h = d. Следовательно,

Суждением 10.8, d = h регистрация £ (n + 1). Внутренней собственностью узла, h2£ d.

Таким образом мы получаем hрегистрацию за 2£ (n + 1). Другое неравенство, регистрация (n + 1)£ h, следует

от Суждения 7.10 и факт, что у T есть n внутренние узлы.

Мы предполагаем, что красно-черное дерево понято со связанной структурой для набора из двух предметов

деревья (Раздел 7.3.4), в котором мы храним вход карты и цветной индикатор в каждом узле. Таким образом космическое требование для хранения n ключи является O (n). Алгоритм для поиска в красно-черном дереве T совпадает с этим для стандартного дерева двоичного поиска (Раздел 10.1). Таким образом поиск в красно-черном дереве берет O (зарегистрируйте n), время.

10.5.1 Операции по обновлению

Выполнение операций по обновлению в красно-черном дереве подобно тому из набора из двух предметов

дерево поиска, за исключением того, что мы должны дополнительно восстановить цветные свойства.

Вставка

Теперь рассмотрите вставку входа с ключом k в красно-черное дерево T, держа

в памяти корреспонденция между T и его связанным (2, 4) дерево T и алгоритм вставки для T. Алгоритм первоначально продолжается как в дереве двоичного поиска (Раздел 10.1.2). А именно, мы ищем k в T, пока мы не достигаем внешнего узла T, и мы заменяем этот узел внутренним узлом z, храня (k, x) и имея двух детей внешнего узла. Если z - корень T, мы окрашиваем z черный, еще мы окрашиваем z красный. Мы также окрашиваем детей z черного. Это действие соответствует вставке (k, x) в узел (2, 4) дерево T с внешними детьми. Кроме того, это действие сохраняет корень, внешний, и свойства глубины T, но это может нарушить внутреннюю собственность. Действительно, если z не корень T, и родительский v z красный, то у нас есть родитель и ребенок (а именно, v и z), которые являются оба красными. Обратите внимание на то, что полностью собственность, v не может быть корнем T, и внутренней собственностью (который был ранее удовлетворен), родительский u v должен быть черным. Так как z и его родитель - прародитель красного, но z u, черное, мы называем это нарушение внутренней собственности двойным красным в узле z.

Чтобы исправить двойной красный, мы рассматриваем два случая.

476