Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЕК. Алгоритмізація. Конспект лекцій.docx
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
2 Мб
Скачать
☆
    1. Балансування дерева

В програмуванні збалансоване дерево в загальному розумінні цього слова - це такий різновид бінарного дерева пошуку, яке автоматично підтримує свою висоту, тобто кількість рівнів вершин під коренем, мінімальною. Ця властивість є важливою тому, що час виконання більшість алгоритмів на бінарних деревах пошуку пропорційний до їхньої висоти, і звичайні бінарні дерева пошуку можуть мати досить велику висоту в тривіальних ситуаціях. Процедура зменшення (балансування) висоти дерева виконується за допомогою трансформацій, відомих як обернення дерева, в певні моменти часу (переважно при видаленні або додаванні нових елементів).

Ідеально збалансованим деревом є таке, у якого для кожної вершини різниця між висотами лівого та правого піддерев не перевищує одиниці. Однак, така умова доволі складна для виконання на практиці і може вимагати значної перебудови дерева при додаванні або видаленні елементів.

Тому було запропоноване менш строге визначення, яке отримало назву умови АВЛ(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 – Балансування дерева

    1. Б-дерева

Для великих сховищ даних, якими є, наприклад, СУБД, використання бінарних дерев пошуку не є доцільним. У таких випадках використовуються так звані Б-дерева, які відрізняються від бінарних тим, що у кожному вузлі можуть зберігати по декілька ключів.

Рисунок 7.22 - Б-дерево з 3 ключами на вузол

Варіація Б-дерева – Б+-дерево, у якому дані зберігаються лише в листі:

Рисунок 7.23 – Б+-дерево

  1. Алгоритми обробки текстових даних на основі регулярних виразів

Перелік питань:

      1. Введення до теорії кінцевих автоматів.

      2. Графічне представлення кінцевих автоматів.

      3. Використання кінцевого автомату: синтаксичний аналіз.

      4. Реалізація синтаксичного аналізу файлу з розділяючими комами.

      5. Детерміновані та недетерміновані кінцеві автомати.

      6. Регулярні вирази.

      7. Форма Бекуса-Наура для запису регулярних виразів.

      8. Синтаксичний аналіз регулярних виразів.

      9. Компіляція регулярних виразів.

      10. Інструменти для спрощення роботи з регулярними виразами.

      11. Зіставлення рядків з регулярними виразами.

      12. Використання регулярних виразів для автоматизації типових задач.