Нижегородский государственный университет им. Н.И. Лобачевского Факультет Вычислительной математики и кибернетики 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