деревья и их AVL- применение Нижегородский государственный университет

advertisement
Нижегородский государственный университет
им. Н.И. Лобачевского
Факультет Вычислительной математики и кибернетики
AVL-деревья и их
применение
Морозова М.В.
Пушкова О.Е.
Короткова Н.О.
Содержание
Определение АВЛ-дерева
 Двоичные деревья поиска

– Определение
– Основные операции
– Трудоемкость поиска

Свойства АВЛ-деревьев
– Трудоемкость поиска
– Балансировка

Основные операции над АВЛ-деревьями
– Вставка вершины


Проведенные эксперименты
Список используемой литературы
Н. Новгород, 2011 г.
AVL-деревья и их применение
2
Определение


АВЛ-дерево — сбалансированное по высоте
двоичное дерево поиска: для каждой его вершины
высота её двух поддеревьев различается не более
чем на 1.
АВЛ — аббревиатура, образованная первыми
буквами создателей (советских учёных) Г.М.
Адельсон-Вельского и Е. М. Ландиса.
Н. Новгород, 2011 г.
AVL-деревья и их применение
3
Двоичные деревья поиска

Двоичное дерево поиска — это двоичное дерево,
для которого выполняются следующие
дополнительные условия (свойства дерева поиска):
Оба поддерева — левое и правое, являются
двоичными деревьями поиска.
• У всех узлов левого поддерева произвольного узла X
значения ключей данных меньше, нежели значение
ключа данных узла X.
• У всех узлов правого поддерева произвольного узла
X значения ключей данных больше, нежели значение
ключа данных узла X.
•
Н. Новгород, 2011 г.
AVL-деревья и их применение
4
Пример двоичного дерева поиска
Н. Новгород, 2011 г.
AVL-деревья и их применение
5
Основные операции
Поиск вершины по ключу.
 Вставка вершины.
 Удаление вершины.

Н. Новгород, 2011 г.
AVL-деревья и их применение
6
Поиск по ключу в ДДП
Рекурсивный алгоритм поиска по ключу:
TreeSearch(node, key)
Begin
If (node == NIL) Then Return node;
If (node.key == key) Then Return node;
If (node.key > key) Then
Return TreeSearch(node.left, key);
Else
Return TreeSearch(node.right, key); End
Н. Новгород, 2011 г.
AVL-деревья и их применение
7
Трудоёмкость поиска
Лучший случай: 1 операция
 Худший случай: N операций
 Оценка производительности:
O((N+1)/2) = O(N)

Н. Новгород, 2011 г.
AVL-деревья и их применение
8
АВЛ-деревья
Н. Новгород, 2011 г.
Реaлизация вычисления определенного интеграла методом прямоугольников с
использованием CUDA
9
Дерево Фибоначчи
Н. Новгород, 2011 г.
Реaлизация вычисления определенного интеграла методом прямоугольников с
использованием CUDA
10
Дерево Фибоначчи
Н. Новгород, 2011 г.
Реaлизация вычисления определенного интеграла методом прямоугольников с
использованием CUDA
11
Высота АВЛ-дерева
Н. Новгород, 2011 г.
Реaлизация вычисления определенного интеграла методом прямоугольников с
использованием CUDA
12
Основные операции
Поиск вершины по ключу
 Вставка вершины
 Удаление вершины

Н. Новгород, 2011 г.
AVL-деревья и их применение
13
Балансировка


Балансировка вершины АВЛ-дерева – операция,
которая в случае разницы высот левого и правого
поддеревьев = 2 , изменяет связи предок-потомок в
поддереве данной вершины так, что разница
становится <=1, иначе ничего не меняет.
Указанный результат получается вращениями
поддерева данной вершины.
Н. Новгород, 2011 г.
AVL-деревья и их применение
14
Балансировка

Используются 4 типа вращения:
– Одинарный поворот налево
– Одинарный поворот направо
– Двойной поворот налево
– Двойной поворот направо
Н. Новгород, 2011 г.
AVL-деревья и их применение
15
Одинарный поворот

Пусть имеется дерево. Balance(8) = -1, Balance(5) = 0
8
5
Н. Новгород, 2011 г.
AVL-деревья и их применение
16
Одинарный поворот

Balance(2) = 0, Balance(5) = -1, Balance(8) =-2
8
5
2
Требуется одинарный поворот
Н. Новгород, 2011 г.
AVL-деревья и их применение
17
Одинарный поворот

Balance(5)=0, Balance(2)=0, Balance(8)=0
5
2
Н. Новгород, 2011 г.
8
AVL-деревья и их применение
18
Двойной поворот

Вставляем узел с ключом 1.
5
2
8
1
Н. Новгород, 2011 г.
AVL-деревья и их применение
19
Двойной поворот

Вставляем узел с ключом 3.
5
2
1
Н. Новгород, 2011 г.
8
3
AVL-деревья и их применение
20
Двойной поворот
Вставляем узел с ключом 4. Balance(2) =2,
Balance(5) = -2

5
2
1
8
3
4
Требуется двойной поворот
Н. Новгород, 2011 г.
AVL-деревья и их применение
21
Двойной поворот

Balance(3) = 0, Balance (5)=0
3
2
1
5
4
8
После двойного поворота направо узел уравновешен
Н. Новгород, 2011 г.
AVL-деревья и их применение
22
Вставка вершины



Рекурсивный спуск по левым сыновьям (если
значение ключа вершины, которую мы вставляем,
меньше значения ключа данной вершины) и правым
сыновьям (если значение ключа вершины, которую
мы вставляем, больше ), пока не встретиться пустое
поддерево
Пробная вставка
Разворачивание рекурсии и балансировка
Н. Новгород, 2011 г.
AVL-деревья и их применение
23
Вставка вершины

Пусть требуется вставить в данное дерево вершину с
ключом 35
70
25
20
10
Н. Новгород, 2011 г.
80
100
50
40
65
AVL-деревья и их применение
24
Вставка вершины
70
80
25
20
10
Н. Новгород, 2011 г.
100
50
40
65
AVL-деревья и их применение
25
Вставка вершины
70
80
25
20
10
Н. Новгород, 2011 г.
100
50
40
65
AVL-деревья и их применение
26
Вставка вершины
70
80
25
20
10
Н. Новгород, 2011 г.
100
50
40
65
AVL-деревья и их применение
27
Вставка вершины
70
80
25
20
10
100
50
40
65
35
Н. Новгород, 2011 г.
AVL-деревья и их применение
28
Вставка вершины
70
80
25
20
10
OK
100
50
40
65
35
Н. Новгород, 2011 г.
AVL-деревья и их применение
29
Вставка вершины
70
80
25
20
10
OK
40
100
50
65
35
Н. Новгород, 2011 г.
AVL-деревья и их применение
30
Вставка вершины
70
OK
20
10
80
25
100
50
40
65
35
Н. Новгород, 2011 г.
AVL-деревья и их применение
31
Вставка вершины
Двойной правый поворот
70
80
25
20
10
100
50
40
65
35
Н. Новгород, 2011 г.
AVL-деревья и их применение
32
Вставка вершины
50
70
25
80
20
10
65
40
100
35
Н. Новгород, 2011 г.
AVL-деревья и их применение
33
Эксперименты



Цель: сравнить собственную реализацию (бинарные
деревья поиска и унаследованные от них АВЛдеревья) с одной из существующих реализаций
Цель: сравнить скорость выполнения операции
поиска для бинарного дерева поиска, АВЛ-дерева и
красно–черного дерева; теоретическая оценка и
практический результат
Реализация красно–черного дерева: контейнер STL
map
Н. Новгород, 2011 г.
AVL-деревья и их применение
34
Красно-черные деревья
Красно-черное дерево – это расширенное двоичное
дерево поиска, вершины которого разделены на
красные и черные таким образом, что выполняются
следующие условия:
• Каждый узел либо красный, либо черный
• Каждый лист (NULL - узел) - черный
• Если узел красный, то оба его ребенка черные
• Все пути, идущие вниз от корня к листьям, содержат
одинаковое количество черных узлов

Н. Новгород, 2011 г.
AVL-деревья и их применение
35
Красно- черные деревья
Н. Новгород, 2011 г.
Реaлизация вычисления определенного интеграла методом прямоугольников с
использованием CUDA
36
Красно-черные деревья
9
5
15
3
7
4
1
17
12
6
8
nil
14
10
nil
nil
nil
nil
nil
nil
nil
nil
nil
Н. Новгород, 2011 г.
nil
nil
nil
nil
AVL-деревья и их применение
37
Эксперименты

Сравнительный график для операции поиска
(усредненные значения времени для серии из 100
экспериментов при числе записей 20x10^3; 50x10^3 и
т.д.)
t
50
45
40
35
30
25
RBTRee
20
BinTree
AVLTree
15
10
5
0
20
Н. Новгород, 2011 г.
50
200
500
число записей 10^3
1000
5000
AVL-деревья и их применение
38
Эксперименты
Н. Новгород, 2011 г.
AVL-деревья и их применение
39
Применение АВЛ-деревьев
Шахматные программы
 Системы поиска информации ( в том числе операции
get и set)
 Организация таблиц
 Сортировка данных

Н. Новгород, 2011 г.
AVL-деревья и их применение
40
Используемая литература




Алексеев В.Е., Таланов В.А. Графы. Модели
вычислений. Алгоритмы. – Нижний Новгород: Изд-во
ННГУ, 2005. 307 с.
Д. Кнут Искусство программирования, том 3.
Сортировка и поиск: Пер. с англ. — 2-е изд. — М.:
«Вильямс», 2007. — С. 824.
Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К.
Алгоритмы: Построение и анализ: Пер. с англ. - 2-е
издание - М.: Издательский дом "Вильямс", 2005. 1296 с.: ил.
Иванников В. П. Видеолекции курса: Введение в
алгоритмы:
http://www.intuit.ru/department/algorithms/introalgo/11/
Н. Новгород, 2011 г.
AVL-деревья и их применение
41
Используемая литература

Вирт Н. Алгоритмы и структуры данных: Пер. с англ.
– СПб.: Невский диалект, 2001.
Н. Новгород, 2011 г.
AVL-деревья и их применение
42
Спасибо за внимание!
Н. Новгород, 2011 г.
AVL-деревья и их применение
43
Download