Балансування дерева
Дата добавления: 2014-01-04; просмотров: 13; лекция была полезна: 0 студентам(у); не полезна: 0 студентам(у).
Опубликованный материал нарушает авторские права? сообщите нам...
В програмуванні збалансоване дерево в загальному розумінні цього слова - це такий різновид бінарного дерева пошуку, яке автоматично підтримує свою висоту, тобто кількість рівнів вершин під коренем, мінімальною. Ця властивість є важливою тому, що час виконання більшість алгоритмів на бінарних деревах пошуку пропорційний до їхньої висоти, і звичайні бінарні дерева пошуку можуть мати досить велику висоту в тривіальних ситуаціях. Процедура зменшення (балансування) висоти дерева виконується за допомогою трансформацій, відомих як обернення дерева, в певні моменти часу (переважно при видаленні або додаванні нових елементів).
Ідеально збалансованим деревом є таке, у якого для кожної вершини різниця між висотами лівого та правого піддерев не перевищує одиниці. Однак, така умова доволі складна для виконання на практиці і може вимагати значної перебудови дерева при додаванні або видаленні елементів.
Тому було запропоноване менш строге визначення, яке отримало назву умови АВЛ(AVL)-збалансованості і говорить, що бінарне дерево є збалансованим, якщо висоти лівого та правого піддерев різняться не більше ніж на одиницію. Дерева, що задовольняють таким умовам, називаються AVL-деревами. Зрозуміло, що кожне ідеально збалансоване дерево є також АВЛ-збалансованим, але не навпаки.
Ідеально збалансовані дерева є ресурсоємними для балансування, тому звичайно балансування здійснюється для АВЛ-дерев.
Кожна вершина АВЛ-дерева зберігає різницю між висотами для лівого і правого піддерев. У збалансованому дереві ця величина може приймати лише одне з трьох значень: -1, 0, 1. Якщо значення відрізняється від вказаного, то дерево необхідно балансувати.
Дерево (піддерево), яке потребує балансування, балансується за допомогою операції обертання вліво чи вправо:
Рисунок 7.19 – Обертання дерева вліво
Рисунок 7.20 – Обертання дерева вправо
Приклад балансування дерева шляхом обертання:
Рисунок 7.21 – Балансування дерева шляхом обертання
Алгоритм:
1. Проводиться розмітка дисбалансу вузлів.
2. Знаходиться нижній вузол з . (позначається Шi)
3. Для Шi розглядається сусідні вузли 2-го порядка.
4. Здійснюються оператори обертання
5. Проводиться операція зв’язування, яка не порушує АВЛ-відносин.
1) Підняти Ш1 2) Опустити Ш2
1) Підняти Ш3
Рисунок 7.22 – Балансування дерева