
- •Розділ 5. Теорія графів
- •5.10. Дерева
- •Зв'язний граф Т без циклів називається деревом.
- •Для графа G з n вершинами і m ребрами рівносильні такі властивості:
- •Орієнтовані і бінарні дерева
- •Кореневе дерево
- •Нащадок v вершини u — це вершина v, в яку веде шлях з
- •Бінарним (двійковим) деревом Т називається упорядковане дерево, з кожної вершини якого може виходити
- •Найпростіший варіант комп'ютерного задання двійкового дерева Т – за допомогою двох масивів: ЛІВИЙ
- •Велика кількість задач як для графів, так і для дерев, вимагають перегляду всіх
- •Алгоритм пошуку вглиб у простому зв'язному графі
- •Часто використовується перегляд графа «пошуком у ширину» (або BFS-метод від англ. breadth first
- •Алгоритм пошуку вшир у простому зв'язному графі
- •Бінарне дерево пошуку
- •Приклад лінійно впорядкованого дерева - проекції номерів вершин на пряму дають правильну послідовність
- •У бінарному дереві пошуку кожній вершині присвоєно значення, яке називають ключем.
- •Алгоритм додавання об'єкта до дерева
- •Приклад побудови дерева для такого списку: {m,a,c,h,i,n,e,b,o,x}.
- •Алгоритм пошуку об'єкта в дереві
- •Приклад пошуку у дереві для такого списку: {x,d}.
- •Алгоритм видалення об'єкта з дерева
- •Якщо вузол, що видаляється, має двох нащадків, то на його місце слід переставити
- •Приклад видалення вузла, що не має нащадків.
- •Приклад видалення вузла, що має одного нащадка.
- •Приклад видалення вузла, що має двох нащадків.
- •Приклад видалення вузла, що має двох нащадків.
- •Найбільша кількість порівнянь, потрібних для додавання або пошуку об'єкта, дорівнює висоті дерева. Якщо
- •АВЛ-дерево — бінарне дерево, у якому висоти двох піддерев кожної з його вершин
- •Ребалансування АВЛ-дерева
- •Дерева прийняття рішень
- •Приклад. Серед восьми монет одна фальшива, вона має меншу вагу. Знайдемо цю монету
- •Відповідне дерево рішень:
- •У багатьох практичних задачах потрібно приймати рішення стосовно досліджуваних об'єктів, відносячи їх до
- •Алгоритм Куїнлана
- •Цю вершину позначають атрибутом а, сам атрибут а вилучають із множини А й
- •Приклад
- •Розглянемо вершину 2. Їй відповідає підмножина прикладів {D9,D11}, які мають значення атрибута прийняття
- •Розглянемо два листки, які відповідають значенням так і ні відповідно для прикладів D11
- •Вибираючи іншу послідовність атрибутів і обходу вершин, можна одержати інше дерево рішень.
- •Порівнявши приклади, зазначимо, що на практиці реалізують версію алгоритму ID3, у якій аналізують
- •5.11. Остови (каркаси) графа
- •Остовне дерево графа
- •Алгоритм побудови остовного дерева
- •Приклад побудови остова.
- •Зауваження. Якщо вихідний граф G не є зв'язним, то алгоритм перегляне тільки одну
- •Остів мінімальної ваги
- •Алгоритм Дж. Краскала знаходження остова мінімальної ваги
- •Приклад. Знаходження остову мінімальної ваги.
- •Найкоротші відстані та шляхи
- •Ідея алгоритму Дейкстри така. Якщо вже знайдено довжини (ваги) l(xi) найкоротших шляхів з
- •Формально в алгоритмі пофарбованій вершині x Xk
- •Алгоритм Дейкстри побудови найкоротших шляхів із вершини s
- •Крок 3. Перетворення позначки у постійну.
- •Приклад. Знаходження найкоротшого шляху між вершиною a і рештою вершин у зваженому графі.
- •Алгоритм Форда - Беллмана побудови найкоротших шляхів із вершини
- •Зміни алгоритму Дейкстри полягають у такому:
- •Приклад. Знаходження найкоротшого шляху між вершиною a і рештою вершин у зваженому графі.
- •Алгоритм Флойда і Данцига побудови найкоротших шляхів між всіма вершинами
- •Попередньо пронумеруємо вершини графа G натуральними числами 1, 2, ..., n і введемо
- •При цьому виявляється можливим обчислити матрицю Lm,
- •Приклад. Знаходження найкоротших шляхів між всіма вершинами у зваженому графі.

Приклад побудови дерева для такого списку: {m,a,c,h,i,n,e,b,o,x}.
m
a n
|
c |
o |
b |
h |
x |
|
e |
i |

Алгоритм пошуку об'єкта в дереві
Застосовують той самий підхід, що для побудови дерева.
1)Почати з кореня.
2)Якщо об'єкт менший, ніж ключ у вершині, то перейти до лівого сина.
3)Якщо об'єкт більший, ніж ключ у вершині, то перейти до правого сина.
4)Якщо об'єкт дорівнює ключу у вершині, то об'єкт знайдено; виконати потрібні дії й вийти.
5)Повторювати кроки 2, 3 та 4, доки не досягнемо вершини, яку не визначено.
6)Якщо досягнуто невизначену вершину, то даний об'єкт не зберігається в дереві; виконати потрібні дії й вийти.

Приклад пошуку у дереві для такого списку: {x,d}.
d< m <x
d> a n <x
c <d |
|
o<x |
b |
h >d |
x |
d> e |
i |
|
d?

Алгоритм видалення об'єкта з дерева
Можливі три випадки:
1)вузол, що видаляється, не має нащадків, тобто є листком дерева;
2)вузол, що видаляється, має одного нащадка;
3)вузол, що видаляється, має двох нащадків.
Перший випадок найпростіший – вузол просто видаляється.
У другому випадку на місце вузла, що видаляється, ставиться його нащадок.
Найскладнішим є випадок, коли вузол, що видаляється, має двох нащадків.

Якщо вузол, що видаляється, має двох нащадків, то на його місце слід переставити інший вузол так, щоб не порушувалась властивість впорядкованості ключів.
Вузол, що переставляється, називається термінальним.
Один із способів визначення термінального вузла полягає у виконанні спуску по правій гілці лівого піддерева вузла, що видаляється, доти, доки не буде знайдено вузла без правого нащадка. Цей вузол і є термінальним. Справді, значення цього вузла не менше значень всіх вузлів лівого піддерева вузла, що видаляється, оскільки він належить правій гілці його лівого піддерева і не має правого нащадка. З іншого боку, значення знайденого у такий спосіб вузла не більше за значення всіх вузлів правого піддерева вузла, що видаляється, оскільки він належить лівому піддереву. Отже, значення знайденого вузла може бути записане до вузла, що видаляється, без порушення впорядкованості ключів. Сам термінальний вузол має бути після цього видалений.

Приклад видалення вузла, що не має нащадків.
m
a n
|
c |
o |
b |
h |
x |
|
e |
i |

Приклад видалення вузла, що має одного нащадка.
m
a n
|
c |
ox |
b |
h |
x |
|
e |
i |

Приклад видалення вузла, що має двох нащадків.
m
a n
|
c |
o |
b |
h |
x |
|
e |
i |

Приклад видалення вузла, що має двох нащадків.
i
an
|
c |
o |
b |
h |
x |
|
e |
|

Найбільша кількість порівнянь, потрібних для додавання або пошуку об'єкта, дорівнює висоті дерева. Якщо дерево збалансоване, то його висота [log(n+1)]. Отже, у цьому разі для додавання чи локалізації об'єкта потрібно не більше ніж [log(n+1)] порівнянь. Бінарне дерево пошуку може розбалансуватись унаслідок додавання нових об'єктів, тому потрібен алгоритм ребалансування (тобто відновлення збалансованості). Проте процедура додавання об'єкта, яка відновлює збалансоване дерево, навряд чи завжди доцільна, бо відновлення збалансованості дерева після випадкового додавання — досить складна операція. Тому розглядають також збалансованість із дещо послабленими вимогами.