- •Тема 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.2. Пошук ушир у простому зв'язному графі
У процесі пошуку вшир вершини графа проглядають в іншій послідовності, ніж у методі пошуку вглиб, і їм надають BFS-номери (від англ. Breadth First Search). BFS-номер вершини .v позначають як BFS(x). Назва пояснюється тим. що під час пошуку рухаються вшир, а не вглиб: спочатку проглядаються всі сусідні вершини, після цього - сусіди сусідів і так далі.
У ході реалізації алгоритму використовують структуру даних для збереження множин, яку називають чергою (англ. queue). Із черги можна вилучити тільки той елемент, який перебував у ній найдовше: працює принцип «першим прийшов - першим вийшов» (first in. first out - скорочено FIFO ). Елемент включається в хвіст черги, а виключається з її голови. Пошук ушир, узагалі кажучи, відрізняється від пошуку вглиб заміною стеку на чергу. Після такої модифікації що раніше відвідується вершина (включається в чергу), то раніше вона використовується (і виключається із черги). Використання вершини полягає в перегляді одразу всіх іще не відвіданих її сусідів. Алгоритм пошуку вшир у простому зв'язному графі
Крок 1. Почати з довільної вершини vs. Виконати BFS(vs):=1. Включити вершину vs у чергу.
Крок 2. Розглянути вершину, яка знаходиться на початку черги, нехай це буде вершина х. Якщо для всіх вершин, суміжних із вершиною х, уже визначені BFS-номери, то перейти до кроку 4, інакше - до кроку 3.
Крок 3. Нехай {х, у} - ребро, у якому номер BFS(y) не визначений. Позначити це ребро потовщеною суцільною лінією, визначити BFS(y) як черговий BFS-номер, включаємо вершину у у чергу й перейти до кроку 2.
Крок 4. Виключити вершину х із черги. Якщо черга порожня, то зупинитись, інакше - перейти до кроку 2.
Щоб результат виконання алгоритму був однозначним, вершини, які суміжні з вершиною х, аналізують за зростанням їх нумерації (або в алфавітному порядку). Динаміку роботи алгоритму пошуку вшир також зручно відображати за допомогою протоколу обходу. Він аналогічний попередньому й відрізняється лише третім стовпцем: тепер це - уміст черги (уважаємо, що голова черги ліворуч, а хвіст - праворуч).
Приклад 33. Виконаємо обхід графа на рис. 33, а пошуком вшир, починаючи з вершини b. Розв'язок зображено на рис. 33, б; протокол пошуку вшир подано в табл. 3.
Рис. 33
Таблиця 3.
Вершина |
BFS -номер |
Вміст черги |
b |
1 |
b |
c |
2 |
bc |
d |
3 |
bcd |
- |
- |
cd |
f |
4 |
cdf |
g |
5 |
cdfg |
h |
6 |
cdfgh |
- |
- |
dfgh |
a |
7 |
dfgha |
e |
- |
fgha |
- |
8 |
fghae |
- |
- |
ghae |
- |
- |
hae |
- |
- |
ae |
- |
- |
e |
- |
- |
|
Обчислювальна складність обох алгоритмів обходу однакова й у разі подання графа списками суміжності становить 0(m+n). де m— кількість ребер, а n - кількість вершин графа. Отже, наведені алгоритми мають лінійну складність, тобто їх ефективність дуже висока.
