
- •Міністерство освіти та науки України
- •Рішення задач на графах Знаходження шляху мінімальної сумарної довжини у зваженому графі з невід’ємними вагами. Алгоритм Дейкстрі
- •Побудова остовного дерева. Алгоритм краскала
- •Задача листоноші
- •Задача листоноші для неорієнтованого графу
- •Задача листоноші для орієнтованого графу
- •Рішення задачі комівояжера. Алгоритм литтла Постановка задачі
- •Рішення задачі
- •Завдання на розрахункову роботу
- •Варіанти завдань
- •Навчальне видання
Задача листоноші для орієнтованого графу
Для орієнтованих графів ми маємо два випадки:
граф G симетричний;
граф G несиметричний.
В першому випадку, якщо G симетричний, то ми отримаємо єдиний розв’язок – Ейлерів контур з якої б вершини ми не почали б.
Другий випадок. Нехай ми маємо орієнтований граф.
d–(x) – півстепінь входу;
d+(x) – півстепінь виходу.
d–(x)= d+(x) – для симетричного графа;
d+(x)
d–(x)
для несиметричного
d+(x) d–(x) графа.
У другому випадку для розв’язання задачі дублюються дуги:
1. якщо вхідних дуг більше, то дублюються вихідні і ця вершина називається джерелом. Кількість дубльованих дуг називається потужністю джерела.
2. якщо вхідних дуг менше, то дублюються вихідні і така вершина називається стоком.
a(i, j) – вага дуги;
f(i, j) – кількість додаткових проходів.
Задача оптимізації:
Після дубляжу граф має стати симетричним. Умова симетричності наступна:
d–(x) + f(j, х) = d+(x) + f(х, i)
d–(x) - d+(x) = f(х, i) - f(j, х) = D(х)
Якщо D(х) 0 – стік;
D(х) = 0 – проміжна вершина;
D(х) 0 – джерело.
В додатковому графі G G′ вводиться додаткова вершина S, яка є загальним джерелом; і вершина t, яка є загальним стоком. Щоб ці вершини не були ізольованими, вводяться дуги – при цьому джерело S з’єднується дугою (s, i) з усіма іншими джерелами графа.
Для загального стоку t вводяться додаткові дуги (j, t), які з’єднують всі вершини із загальним стоком t.
Пропускна здатність дорівнює D(х).
Рис. 8. Граф G. |
Приклад. для вершини а: d–(a) = 1 = d+(a) = 1. D(a) = 0 - Це проміжна вершина. для вершини b: d–(b) = 3; d+(b) = 1; D(b) = 2 - Це джерело. для вершина c: d-(c) = 1; d+(c) = 2: D(c) = - 1 – це стік. для вершини d: d–(d) = 1; d+(d) = 2; D(d) = - 1 – це стік. для вершини e: d–(e) = 2; d+(e) = 2; D(e) = 0 – проміжна вершина |
Оскільки граф несиметричний d+(x) d-(x), необхідно визначити, які дуги будуть дублюватися. Для цього будуємо граф G′.
В початковий граф G вводимо дві вершини: вершину S - загальне джерело та вершину t - загальний стік.
Будуємо граф G′.
Рис.9. Граф G′. |
Рис.10. Граф G*. |
1.S,
b, d, t
1 од.
2 одиниці
2. S, b, d, c, t 1 од.
Ми перегнали дві одиниці потоку мінімальними маршрутами з S в t. Дублюємо дуги, по яких переганяли потоки з S в t. Втрати при цьому будуть становити: 2∙5 + 1∙1 = 11 одиниць.
Граф G* без вершин S і t, але з про дубльованими дугами, має бути симетричним.
С: a, b, d, c, b, d, c, b, d, c, e, a.
Рішення задачі комівояжера. Алгоритм литтла Постановка задачі
Комівояжер повинен об'їздити n міст. Для того, щоб скоротити витрати, він хоче побудувати такий маршрут, аби об'їздити всі міста точно по одному разу і повернутися в початковий з мінімумом витрат.
В
термінах теорії графів завдання можна
сформулювати таким чином. Задано n
вершин і матриця {cij},
де cij
≥
0
– довжина (або ціна) дуги (i,
j)
.
Підмаршрутом
комівояжера
Z
розумітимемо цикл i1,
i2,…,
in,
i1
точок 1, 2,…, n.
Таким чином, маршрут
є набором дуг. Якщо між містами i
і j
немає переходу, то в матриці ставиться
символ «нескінченність». Він обов'язково
ставиться по діагоналі, що означає
заборону на повернення в точку, через
яку вже проходив маршрут комівояжера,
довжина маршруту l(z)
дорівнює сумі довжин дуг, що входять в
маршрут. Хай Z
– множина всіх можливих маршрутів.
Початкова вершина i1
– фіксована. Потрібно знайти маршрут
z0
Z
такий, що l(z0)=
min l(z), z
Z.