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

10.2. Деревья avl 439

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

Оправдание: Вместо того, чтобы пытаться найти верхнюю границу на высоте дерева AVL непосредственно, это, оказывается, легче работать над «обратной проблемой» нахождения, что более низкое привязало минимальное число внутренних узлов n (h) дерева AVL с высотой h. Мы показываем, что n (h) растет, по крайней мере, по экспоненте. От этого это - легкий шаг, чтобы получить это, высота дерева AVL, хранящего n записи, является O (зарегистрируйте n).

Для начала заметьте, что n (1) = 1 и n (2) = 2, потому что у дерева AVL высоты 1 должны быть по крайней мере один внутренний узел и дерево AVL высоты 2, должны иметь, по крайней мере,

два внутренних узла. Теперь, для h³ 3, дерево AVL с высотой h и минимумом

число узлов таково, что оба его поддерева - деревья AVL с минимумом

число узлов: один с высотой h- 1 и другой с высотой h- 2. Взятие

укоренитесь во внимание, мы получаем следующую формулу, которая связывает n (h) с n (h- 1) и n (h- 2) для h³ 3:

n (h) = 1 + n (h- 1) + n (h- 2). (10.1) В этом пункте читатель, знакомый со свойствами прогрессий Фибоначчи (Секунда - tion 2.2.3 и Упражнение C-4.17) уже, видит, что n (h) является функцией, показательной в h. Для остальной части читателей мы возобновим наше рассуждение.

Формула 10.1 подразумевает, что n (h) является строго увеличивающейся функцией h. Таким образом, мы

знайте что n (h- 1)> n (h- 2). Замена n (h- 1) с n (h- 2) в Формуле 10.1

и пропуская этот 1, мы добираемся для h³ 3,

n (h)> 2 n (h- 2). (10.2)

Формула 10.2 указывает, что n (h), по крайней мере, удваивает каждый раз h увеличения 2, который

интуитивно средства, которые n (h) выращивает по экспоненте. Чтобы показать этот факт формальным способом, мы неоднократно применяем Формулу 10.2, приводя к следующей серии неравенств:

n (h)> 2 n (h- 2)

> 4 n (h- 4)> 8 n (h- 6)

.. .

> 2i n (h- 2i). (10.3)

Таким образом, n (h)> 2i∙n (h-2i), для любого целого числа i, такой, что h-2i³ 1. Так как мы уже

знайте ценности n (1) и n (2), мы выбираем i так, чтобы h- 2i был равен или 1 или 2.

Таким образом, мы выбираем

i = h- 1. 2

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

Заменяя вышеупомянутой ценностью меня в формуле 10.3, мы получаем для h³ 3,

n (h)> 2 ⌈ 2⌉-1 n h- 2 ч + 2 ч

2

³ 2 ⌈ 2

h⌉-1

n (1)

³ 2 2- 1. h

Беря логарифмы обеих сторон формулы 10.4, мы получаем

(10.4)

от которого мы добираемся

зарегистрируйте n (h)> h- 1, 2

h <2 регистрации n (h) + 2,

(10.5)

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

Суждением 10.2 и анализ деревьев двоичного поиска, данных в Разделе 10.1,

операция находит в карте осуществленный с деревом AVL, пробеги вовремя O (зарегистрируйте n), где n - число записей в карте. Конечно, мы все еще должны показать, как поддержать собственность баланса высоты после вставки или удаления.

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

Вставка и операции по удалению для деревьев AVL подобны тем для набора из двух предметов

деревья поиска, но с деревьями AVL мы должны выполнить дополнительные вычисления.

Вставка

Вставка в дереве AVL T начинается как в операции по вставке, описанной в Секунду -

tion 10.1.2 для (простого) дерева двоичного поиска. Вспомните, что эта операция всегда вставляет новый вход в узле w в T, который был ранее внешним узлом, и это заставляет w стать внутренним узлом с операцией insertAtExternal. Таким образом, это добавляет двух внешних детей узла к w. Это действие может нарушить собственность баланса высоты, однако, поскольку некоторые узлы увеличивают свои высоты одной. В частности узел w, и возможно некоторые его предки, увеличивает их высоты одной. Поэтому, давайте опишем, как реструктурировать T, чтобы восстановить его баланс высоты.

Учитывая дерево двоичного поиска T, мы говорим, что внутренний узел v T уравновешен, если абсолютная величина различия между высотами детей v равняется самое большее 1, и мы говорим, что это выведено из равновесия иначе. Таким образом собственность баланса высоты, характеризующая деревья AVL, эквивалентна высказыванию, что каждый внутренний узел уравновешен.

Предположим, что T удовлетворяет собственность баланса высоты, и следовательно является деревом AVL,

до нашей вставки нового входа. Поскольку мы упомянули после выполнения