- •Лекція №18. Структури та параметри графів
- •Питання для самоперевірки та вправи
- •Лекція №19. Мости, блоки
- •Питання для самоперевірки та вправи
- •Лекція №20. Зв’язність
- •Питання для самоперевірки та вправи
- •Змістовий модуль 5. Спеціальні графи Лекція №21. Двохдольні графи
- •Питання для самоперевірки та вправи
- •Лекція №22. Обходи графів
- •Гамільтонові графи
- •Питання для самоперевірки та вправи
- •Лекція №23. Дерева
- •Питання для самоперевірки та вправи
- •Змістовий модуль 6. Алгоритми на графах Лекція №24. Фарбування графів
- •Деякі числа теорії графів
- •Питання для самоперевірки та вправи
- •Лекція №25 Мережі
- •Розріз мережі
- •Алгоритм знаходження максимального потоку
- •1. Розстановка поміток
- •2. Збільшення потоку
- •Питання для самоперевірки та вправи
- •Питання для самоперевірки та вправи
- •Лекція №27 Побудова дерева найкоротших шляхів. Транспортна задача
- •Питання для самоперевірки та вправи
- •Основна
- •Додаткова
Алгоритм знаходження максимального потоку
Розглянемо
граф з пропускними спроможностями дуг
,з
джерелом
і стоком
,
.
Потоки в дугах позначимо
.
1. Розстановка поміток
Помітка
будь-якої вершини
складається з двох частин і може бути
двох видів:
або
,
де “+” означає, що потік допускає
збільшення вздовж дуги
,
а “-“ – зменшення потоку вздовж дуги
.
- максимальна величина додаткового
потоку, який може протікати від
до
вздовж побудованого ланцюга потоку.
Вершина може знаходитись в одному з трьох станів:
1) вершині приписана помітка, і вершина проглянута (тобто, проаналізовані усі суміжні з нею вершини);
2) помітка приписана, але вершина не проглянута;
3) вершина не має помітки.
Крок 1
Присвоїти
вершині
помітку
.
Крок 2
Взяти
деяку непроглянуту вершину
з поміткою; Нехай її помітка буде
:
а) кожній непоміченій вершині
,
для якої
,
присвоїти помітку
,
де
;
б) кожній непоміченій вершині
,
для якої
,
присвоїти помітку
,
де
.
Тепер вершина і помічена, і проглянута, а вершини, помітки яким просвоєні, являються не проглянутими.
Крок 3
Повторювати крок 2 доти, поки або вершина буде помічена, і тоді перейти до кроку 4, або буде не поміченою і ніяких інших поміток не можна буде розставити. У цьому випадку алгоритм закінчує роботу з максимальним вектором потоку.
2. Збільшення потоку
Крок 4
Покласти
і перейти до кроку 5.
Крок 5
а) якщо помітка в вершині
має вигляд
,
то змінити потік вздовж дуги
з
на
;
б) якщо помітка в вершині
має вигляд
,
то змінити потік вздовж дуги
з
на
.
Крок 6
Якщо , то стерти усі помітки і повернутися до кроку 1, знову розставляючи помітки, але використовуючи вже покращений потік, знайдений на кроці 5.
Якщо
,
то повернутися до кроку 5, вважаючи
.
Питання для самоперевірки та вправи
1. Дайте поняття мережі, транспортної мережі. Наведіть приклади.
2. Що називається розрізом мережі, мінімальним розрізом ? Як обчислюється пропускна спроможність розрізу ?
3. Сформулюйте теорему Форда-Фалкерсона. Де застосовується ця теорема ?
4. Опишіть алгоритм знаходження максимального потоку.
Лекція №26 Знаходження максимального потоку в транспортній мережі. Задача відшукання найкоротшого та критичного шляху між двома заданими вершинами
Знайдемо
максимальний потік від вершини
до вершини
в мережі, зображеній на малюнку 26.1.
Рис. 26.1 – Транспортна мережа
Розв’язок:
За
початковий візьмемо потік з нульовими
значеннями на усіх дугах
.
Крок 1.
Припишемо
вершині
помітку
.
Крок 2.
а)
множина непомічених вершин виду
.
Вершині
приписується помітка:
.
Вершині
-
.
б)
множина непомічених вершин виду
.
Отже, тепер помічена і проглянута, вершини і помічені, але не проглянуті, а усі інші вершини не помічені. Повторюємо крок 2, починаючи з вершини (вершини проглядаються у порядку збільшення їх індексів).
Множина непомічених вершин:
а)
.
Помітка
для
:
.
б)
.
Розглянемо
вершину
.
Множина непомічених вершин для неї
і
:
Для вершини поміткою буде:
.
Для
вершини
:
.
Беручи вершину ніяких поміток поставити не можемо, оскільки суміжні з вершини вже помічені.
Розглянемо вершину і одержимо наступні помітки:
Для
:
.
Для
:
.
Для
:
.
Переходимо до кроків 4 і 5.
.
Оскільки помітка
-
потік вздовж дуги
збільшуємо на
,
отже
.
Потік
.
Рис. 26.2 – Потоки після першої ітерації
Стираємо усі помітки і повертаємося до кроку 1 для другого проходу і одержуємо нові помітки:
Рис. 26.3 - Потоки і помітки після другої ітерації
Рис. 26.4 - Потоки і помітки після третьої ітерації.
Рис. 26.5 - Потоки і помітки після четвертої ітерації
Рис. 26.6 - Потоки і помітки після п’ятої ітерації
Рис. 26.7 - Потоки і помітки після шостої ітерації
Потік,
який відповідає дугам
,
є максимальним і його значення дорівнює
.
Задача
відшукання найкоротшого та критичного
шляху між двома заданими вершинами
і
.
Нехай
- помітка вершини
.
Присвоєння початкових значень.
Крок
1 Покласти
і вважати цю помітку постійною. Покласти
для усіх
і вважати ці помітки тимчасовими.
Покласти
.
Обновлення поміток.
Крок
2 Для всіх
,
помітки яких тимчасові, змінити помітки
у відповідності з виразом
.
Перетворення поміток у постійну.
Крок
3 Серед усіх вершин з
тимчасовими помітками знайти таку, для
якої
.
Крок
4 Вважати помітку
вершини
постійною і покласти
.
Крок
5 Якщо
,
то
- довжина найкоротшого шляху. Якщо
,
то перейти до кроку 2.
Наприклад:
Знайти найкоротший шлях від вершини
до вершини
для графа
,
зображеного на малюнку 11.8.
Рис. 26.8 – граф
Матриця ваги графа представлена таблицею26.1
Таблиця 26.1 –Матриця ваги графа
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
3 |
6 |
12 |
|
10 |
|
18 |
|
|
|
2 |
|
13 |
|
|
18 |
|
25 |
|
20 |
|
|
7 |
|
|
|
25 |
|
5 |
16 |
4 |
|
|
|
|
|
|
5 |
|
10 |
|
23 |
|
|
|
|
20 |
16 |
10 |
|
14 |
|
9 |
|
3 |
2 |
|
4 |
|
14 |
|
|
24 |
|
6 |
|
|
|
23 |
|
|
|
5 |
|
12 |
13 |
7 |
|
|
9 |
24 |
5 |
|
Розв’язок:
Крок
1
-помітка постійна.
для будь - якого
,
.
Перша ітерація:
Крок
2
.
Помітки
тимчасові і дорівнюють нескінченості.
Обновлюємо помітку вершини
:
.
Отже,
.
Аналогічно знаходимо:
.
Крок
3 Знаходимо
,
тобто
,
де
це помітки вершин
.
Крок
4 Вершина
одержує постійну помітку
.
Крок 5 Не всі вершини мають постійну помітку, тому переходимо до кроку 2.
Друга ітерація:
Крок
2
.
.
.
Крок
3 Знаходимо
- це вершина
.
Крок
4 Вершина
одержує постійну помітку
.
Крок 5 Переходимо до кроку 2.
Обчислення по кожній ітерації зручно зводити в таблицю 11.2.
Третя ітерація:
Четверта ітерація:
На
четвертій ітерації алгоритм закінчує
роботу, оскільки
відповідає стоку
і довжина найкоротшого шляху дорівнює
.
Таблиця 11.2 – Ітерації знаходження найкоротшого шляху в графі
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
0 |
10 |
|
|
|
|
3* |
6 |
12 |
|
0 |
5* |
|
7 |
|
17 |
3* |
6 |
12 |
|
0 |
5* |
23 |
7 |
|
17 |
3* |
6* |
12 |
|
0 |
5* |
23 |
7* |
29 |
17 |
3* |
6* |
11 |
Для того, щоб знайти критичний шлях в алгоритмі знаходження найкоротшого шляху, треба внести зміни в кроці 2 і 3.
Крок
2
.
Крок
3
.
Цей
алгоритм використовується, наприклад,
для виявлення максимального часу
переходу від одного виду роботи до
іншого. В цьому випадку матриця ваги
буде представляти собою час переходу
від
-ї
до
-ї
роботи.
