
12-13_PO_SiAOD_Osen_Lektsia_5.pptx
- Количество слайдов: 12
Лекция А. Ф. ЗУБАИРОВ
Сбалансированные деревья поиска При построении деревьев из случайного набора данных существует вероятность построения вырожденного дерева, близкого по структуре к линейному списку. Поддержание бинарного дерева в оптимальном состоянии после каждого удаления и добавления записи сложная (ресурсоемкая) задача. Решение проблемы поддержания дерева в «хорошем» состоянии предложено Г. М. Адельсок -Вельским и Е. М. Ландисом.
Сбалансированные деревья поиска Критерий сбалансированности по высоте: дерево является сбалансированным тогда и только тогда, когда для каждого узла высота его двух поддеревьев различается не более, чем на 1. Такие деревья называют АВЛ-деревьями (по фамилиям создателей). Теорема Адельсона-Вельского и Ландиса: путь поиска по сбалансированному дереву не превышает пути поиска по оптимальному дереву более, чем на 45%.
Вставка узла При вставке высота соответствующего поддерева увеличивается на 1. 8 4 2 10 6 h. L=h. R – критерий сбалансированности сохраняется; 2. h. L<h. R – дерево остается сбалансированным; 3. h. L>h. R – сбалансированность нарушается – необходимо перестроение дерева. 1.
Вставка узла Включение узла 1 или 3: 8 8 4 2 4 10 2 6 10 6 7 5 1 4 6 2 1 8 6 4 10 2 8 5 7 10
Однократный LL-поворот (левый) V W W V
Двукратный LR-поворот (левый-правый) V Z W W V Z
Вставка узла Для хранения информации об узле следует добавить в узел новое поле balance (b) равное высоте правого поддерева минус высота левого поддерева: значения -1, 0, 1. Процесс включения узла: 1. Следовать по пути поиска до NULL. 2. Включить новый узел и определить показатель сбалансированности. 3. Пройти обратно по пути поиска и проверить показатель сбалансированности.
Вставка узла
Поиск по бинарному дереву
Поиск по бинарному дереву А 7. [Балансировка] Три случая: 1. Если s. b == 0 (дерево стало выше), s. b = a, first. llink. Завершить выполнение алгоритма. 2. Если s. b == -a (дерево стало более сбалансированным), s. b =0. Конец алгоритма. 3. Если s. b == a (дерево разбалансировано) Если r. b == a, перейти к A 8, иначе к А 9. А 8. [Однократный поворот] Установить p = r, link(a, s) = link(-a, r), link(-a, r) = s, s. b = 0, r. b = 0. Перейти к шагу А 10. А 9. [Двукратный поворот] p = link(-a, r), link(-a, r) = link(a, p), link(a, p) = r, link(a, s) = link(-a, p), link(-a, p) = s. Присвосить s. b и r. b: -a и 0, если p. b = a, 0 и 0, если = p. b = 0, 0 и a, если p. b = -a. Присвоить p. b = 0. А 10. (p указывает на корень нового поддерева, t – на родительский по отношению к корню старого поддерева узел s). Если s == t. rlink, t. rlink = p, иначе t. llink = p.
Сбалансированные по высоте деревья поиска В случае, если ограничить разность высот деревьев величиной k, получаются сбалансированные по высоте бинарные деревья (К. К. Форстер) – HB(k)-деревья. Сбалансированные деревья – частный случай HB -деревьев – HB(1).
12-13_PO_SiAOD_Osen_Lektsia_5.pptx