- •Тема 6. Дерева. 96
- •Тема 1 Множини. Операції над множинами
- •1. Основи теорії множин
- •2. Види множин
- •3. Операції над множинами
- •4. Розбиття і покриття.
- •5. Властивості операцій над множинами:
- •6. Ком’ютерне зображення множин
- •Тема 2 Комбінаторика
- •1. Класичні задачі комбінаторики
- •2. Правило суми та добутку
- •3. Основні формули
- •4. Задача про цілочислові розв'язки
- •5. Біном н’ютона
- •6. Арифметичний трикутник (трикутник Паскаля)
- •7. Розв’язування рекурентних рівнянь.
- •8. Числа Фібоначчі
- •Тема 3. Основи теорії відношень
- •1. Основні поняття теорії відношень
- •2. Способи задання бінарних відношень
- •3. Операції над відношеннями
- •4. Властивості бінарних відношень
- •1. Рефлексивність
- •2. Антирефлексивність
- •3. Симетричність
- •4. Несиметричність
- •5. Антисиметричність
- •6. Транзитивність
- •7. Антитранзитивність
- •5. Відношення еквівалентності, порядку, толерантності
- •Тема 4. Теорія функцій. Алгебри
- •1. Алгебраїчні структури
- •2. Алгебри булевих функцій
- •Тема 5. Теорія графів
- •1. Основні означення та властивості
- •2. Деякі спеціальні класи простих графів
- •3. Способи подання графів
- •3.1. Матриця інцидентності
- •3.2. Матриця суміжності
- •3.3. Подання графа списком пар (списком ребер)
- •3.4. Подання графа списками суміжності
- •3.5. Матриці досяжностей і контрдосяжностей
- •4. Шляхи та цикли. Зв’язність
- •4.1. Головні означення та результати. Термінологія
- •4.2. Характеристики зв’язності простого графа
- •5. Ізоморфізм графів
- •6. Ейлерів цикл у графів
- •7. Гамільтонів цикл у графі
- •8. Зважені графи та алгоритми пошуку найкоротших шляхів
- •9. Обхід графів
- •9.1. Пошук углиб у простому зв'язному графі
- •9.2. Пошук ушир у простому зв'язному графі
- •10. Планарні графи
- •11. Розфарбування графів
- •12. Незалежні множини вершин. Кліки
- •Тема 6. Дерева.
- •1. Основні означення та властивості
- •2. Рекурсія. Обхід дерев. Префіксна та постфіксна форми запису виразів
- •43018, Луцьк-18, вул. Львівська,75
9. Обхід графів
Існує багато алгоритмів на графах, які ґрунтуються на систематичному переборі їх вершин або обході вершин, під час якого кожна вершина одержує унікальний порядковий номер. Алгоритми обходу вершин графа називають методами пошуку.
9.1. Пошук углиб у простому зв'язному графі
Опишемо метод пошуку в простому зв'язному графі. Цей метод називають пошукам углиб, або DFS-методом (від англ. Depth First Search).
Нехай G=(V, E) – простий зв'язний граф, усі вершини якого позначені попарно різними символами. У процесі пошуку вглиб вершинам графа G надають номери (DFS-номери). та певним чином позначають ребра. У ході роботи алгоритму використовують структуру даних для збереження множин, яку називають стеком (англ. stack - стіг). Зі стеку можна вилучити тільки той елемент, котрий було додано до нього останнім: стек працює за принципом «останнім прийшов - першим вийшов» (last in, first out - скорочено LIFO). Інакше кажучи, додавання й вилучення елементів у стеку відбувається з одного кінця, який називають верхівкою стеку. DFS-номер вершини х позначають як DFS(x).
Алгоритм пошуку вглиб у простому зв'язному графі
Крок 1. Почати з довільної вершини vs. Виконати DFS(v):=1. Включити цю вершину в стек.
Крок 2. Розглянути вершину у верхівці стеку: нехай це буде вершина х. Якщо всі ребра, інциденти вершині х, позначено, то перейти до кроку 4, інакше - до кроку 3.
Крок 3. Нехай {х, у) - непозначене ребро. Якщо DFS(y) уже визначено, то позначити ребро (х, у) штриховою лінією та перейти до кроку 2. Якщо DFS(y) не визначено, то позначити ребро (х, у) потовщеною суцільною лінією, визначити DFS(y) як черговий DFS-номер, включити цю вершину в стек і перейти до кроку 2.
Крок 4. Виключити вершину х зі стеку. Якщо стек порожній, то зупинитись, інакше - перейти до кроку 2.
Щоб вибір номерів був однозначним, доцільно домовитись, що вершини, суміжні з тією, яка вже отримала DFS -номер. аналізують за зростанням їх нумерації (або в алфавітному порядку). Динаміку роботи алгоритму зручно відображати за допомогою таблиці з трьома стовпцями: вершина, DFS- номер, уміст стеку. її називають протоколом обходу графа пошуком вглиб.
Приклад 32. Виконаємо обхід графа на рис. 32, а пошуком углиб, починаючи з вершини b. Розв'язок подано на рис. 32; б протокол пошук вглиб подано в табл. 2. У цій таблиці в третьому стовпці вважаємо, що верхівка стеку праворуч.
а б
Рис. 32
Ребра, які позначено потовщеною суцільною лінією, називають «прямими», а пунктирною – «зворотними». Їх використовують у різних алгоритмах на графах, заснованих на алгоритмі пошуку вглиб.
Таблиця 2.
Вершина |
DFS-номер |
Вміст стеку |
b |
I |
b |
с |
2 |
bc |
d |
3 |
bed |
a |
4 |
heda |
- |
- |
bed |
- |
- |
he |
f |
5 |
bef |
e |
6 |
befe |
g |
7 |
hefeg |
- |
- |
befe |
- |
- |
bef |
- |
- |
be |
h |
8 |
heb |
- |
- |
be |
- |
- |
b |
- |
- |
0 |
