Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вопросы к экзамену.docx
Скачиваний:
39
Добавлен:
01.09.2021
Размер:
4.91 Mб
Скачать

Узлы avl - дерева

AVL-деревья имеют структуру, похожую на бинарные деревья поиска. Все операции идентичны описанным для бинарных деревьев, за исключением методов Insert и Delete, которые должны постоянно отслеживать соотношение высот левого и правого поддеревьев узла. Для сохранения этой информации мы расширили определение объекта TreeNode (см. предыдущий номер), включив поле balanceFactor (показатель сбалансированности), которое содержит разность высот правого и левого поддеревьев.

Если balanceFactor отрицателен, то узел «перевешивает влево», так как высота левого поддерева больше, чем высота правого поддерева. При положительном balanceFactor узел «перевешивает вправо». Сбалансированный по высоте узел имеет balanceFactor = 0. В AVL-дереве показатель сбалансированности должен быть в диапазоне [-1, 1].

На рисунке 3 изображены AVL-деревья с пометками -1, 0 и +1 на каждом узле, показывающими относительный размер левого и правого поддеревьев.

  • -1: Высота левого поддерева на 1 больше высоты правого поддерева.

  • 0: Высоты обоих поддеревьев одинаковы.

  • +1: Высота правого поддерева на 1 больше высоты левого поддерева

Вставка ключа

Вставка нового ключа в АВЛ-дерево выполняется, по большому счету, так же, как это делается в простых деревьях поиска: спускаемся вниз по дереву, выбирая правое или левое направление движения в зависимости от результата сравнения ключа в текущем узле и вставляемого ключа. Единственное отличие заключается в том, что при возвращении из рекурсии (т.е. после того, как ключ вставлен либо в правое, либо в левое поддерево, и это дерево сбалансировано) выполняется балансировка текущего узла. Строго доказывается, что возникающий при такой вставке дисбаланс в любом узле по пути движения не превышает двух, а значит применение вышеописанной функции балансировки является корректным.

7. Удаление узла из AVL-дерева.

8. Оценка сложности поиска в AVL-дереве.

9. Дерево кратчайших путей.

Дерево кратчайших путей – это ориентированное дерево с корнем в вершине S . Все пути в этом дереве – кратчайшие для данного графа.

Построение дерева кратчайших путей

Дерево кратчайших путей строится по таблице: в него включаются вершина за вершиной в том порядке, в котором они получали постоянные метки. Первым в дерево включается корень – вершина S .

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

Сначала включаем в дерево корень – вершину 1. Затем в дерево включается дуга (1,6). Следующей была упорядочена вершина 9, длина кратчайшего пути до которой равна 3. Первый раз число 3 появилось в третьей строке, которая заполнялась при . Следовательно, вершина 6 – предпоследняя вершина кратчайшего пути до вершины 9.

Включаем в дерево дугу (6,9) длины 1. Затем была упорядочена вершина 2 с длиной кратчайшего пути, равной 4. Это число первый раз появилось в третьей строке, которая заполнялась при . Следовательно, кратчайший путь во вторую вершину проходит по дуге (6,2).

Включаем в дерево дугу (6,2) длины 2. Далее была упорядочена вершина 12, . Первый раз число 4 появляется в четвертой строке, которая заполнялась при . В дерево включается дуга (9,12) длины 1. Полное дерево кратчайших путей показано на рисунке выше.

Соседние файлы в предмете Технология программирования