- •Розділ 5. Теорія графів
- •5.12. Мережі
- •Дослідження перерізів і циклів у графі
- •Будь-яка максимальна лінійно незалежна множина вектор-циклів, об'єднаних за рядками у матрицю
- •Переріз графа
- •Для перерізу (як і для циклу) довільно вводиться орієнтація — напрямок від одного
- •Матриця S, рядки якої утворюють максимальний лінійно-незалежний набір вектор-перерізів, називається матрицею перерізів (або
- •Переріз s називається фундаментальним (за деревом Т), якщо він містить точно одну дугу
- •Фундаментальною матрицею перерізів ST (за деревом Т) називається матриця, рядками якої є вектор-перерізи,
- •Фундаментальним циклом графа G (за деревом
- •Течії у мережах
- •Течією у мережі G з вершини хs до вершини хt величини v називається
- •Приклад мережі, що складається з п'яти вузлів і восьми дуг, в якій розглядається
- •Задача про максимальну течію
- •Теорема про максимальну течію і мінімальний переріз. Для будь якої мережі максимальна величина
- •Алгоритм Форда — Фалкерсона визначення величини максимальної течії
- •Операція А (розміщення позначок).
- •Крок 3. Повторювати крок 2 доти, доки або стік — вершина хt —
- •Операція Б (збільшення течії).
- •Алгоритм розміщення позначок (операція А) зображує пошук шляху від джерела хs до стоку
- •Приклад. Знайти максимальну течію у мережі.
- •1. Візьмемо течію, що зображена на рисунку як початкова припустима течія. Вона має
- •13.Стік має позначку (-х4,2). Тому зменшуємо течію вздовж дуги (х5,х4) на 2.
- •16. Стираємо всі позначки.
- •Мережі з багатьма джерелами і стоками
- •З'єднаємо вершину xs зі всіма дійсними джерелами.
- •Задачу знаходження максимальної течії для всіх пар вузлів у неорієнтованій мережі можна розглядати
- •4. Замінимо дуги з мінімального перерізу (Xs,Xt)
- •Приклад реалізації алгоритму Гоморі — Ху. Числа, приписані дугам, відповідають їх пропускним здатностям.
16. Стираємо всі позначки.
17. Привласнимо вершині х1 позначку (+, ).
18. Вершини, суміжні вершині х1, не можна позначити, оскільки дуга (х1,х2) насичена—
(х1,х2)= (y1)=c(y1)=6, а через дугу (х3,х1) течія не передається. Стік залишився непозначеним. Отже, одержана течія є максимальною. Дуги (х1,х2) і (х3,х1)
утворюють мінімальний переріз. Множина позначених вершин утворює той його бік, який містить джерело: Xs={х1}. Непозначені вершині
утворюють інший бік перерізу, що містить стік: Xt={х2,х3,х4,х5}. Побудована течія має вигляд (y1)=6,
(y5)=8, (y6)=2, (y4)=2, (y3)=2, (y2)= (y7)=0.
Мережі з багатьма джерелами і стоками
Алгоритм Форда — Фалкерсона застосовний і для визначення величини максимальної течії між множиною вершин-джерел і множиною вершин-стоків.
Розіб'ємо множину вершин на множину джерел Х+={х X: Q(x)>0}, що створюють течію, множину
стоків Х-={х X: Q(x)<0}, що споживають течію і множину проміжних вершин Х0={х X: Q(x)=0}, що зберігають течію : X=Х+ Х- Х0. Перетворимо течію
у течію, яка має тільки одне джерело та один стік, збільшивши кількість вершин у мережі. Для цього додамо дві нові вершини — «фіктивне» джерело xs і
«фіктивний» стік xt.
З'єднаємо вершину xs зі всіма дійсними джерелами.
Цим дугам припишемо течію, що утворена відповідним джерелом. А від кожного дійсного стоку спрямуємо дугу до «фіктивного» стоку xt. Цим дугам
припишемо течію, що споживається відповідним стоком. При цьому пропускні здатності доданих дуг вважаємо нескінченними. В результаті одержуємо мережу з одним джерелом і одним стоком. Застосовуючи до неї алгоритм Форда — Фалкерсона, знаходимо максимальну течію, яка є максимальною і для вихідної мережі.
2
Задачу знаходження максимальної течії для всіх пар вузлів у неорієнтованій мережі можна розглядати як узагальнення задачі з одним джерелом і одним стоком і її можна розв'язати, застосовуючи алгоритм Форда
— Фалкерсона для кожної пари вершин. Але більш ефективним є алгоритм, що запропонований Р.Гоморі і Т.Ху.
Алгоритм Гоморі — Ху
1. Оберемо деякі дві вершини графа. Позначимо одну з них через xs, а іншу через xt.
2. Застосуємо алгоритм Форда — Фалкерсона і знайдемо максимальну течію з джерела xs у стік xt.
При цьому множина позначених вершин і множина непозначених вершин утворюють два боки мінімального перерізу Xs і Xt.
3. Оберемо дві вершини графа xi і xj що лежать з одного боку від перерізу. Наприклад, нехай xi, xj Xs.
4. Замінимо дуги з мінімального перерізу (Xs,Xt)
однією дугою, а вершини боку перерізу, в якому не лежать вершини xi, xj (наприклад, Xt), — однією
вершиною. Пропускну здатність у так визначеній дузі покладемо рівній пропускній здатності перерізу (Xs,Xt).
5. Покладемо: xi=xs, xj=xt, і повернемося до другого кроку.
Можна показати, що після того, як буде обрано n-1 пара вершин, ми визначимо всі n(n-1)/2 величин максимальної течії для вихідної мережі. Основна ідея алгоритму полягає в ітеративній побудові максимального остовного дерева, гілки якого відповідають перерізам, а пропускні здатності гілок дорівнюють пропускним здатностям цих перерізів.
Приклад реалізації алгоритму Гоморі — Ху. Числа, приписані дугам, відповідають їх пропускним здатностям. Треба для кожної пари вузлів мережі визначити величину максимальної течії між ними.
1. Оберемо вершини s=x1 і t=х2. Мінімальну пропускну здатність відносно джерела s=x1 і стоку
t=х2 має переріз (Xs,Xt) з боками Xs={x1, x3, x4, x5, x6} і Xt={x2}. За теоремою величина максимальної течії
між вершинами x1 і x2 дорівнює пропускній здатності перерізу (Xs,Xt):
v12=v21=c(Xs,Xt)=2+3=5.
Об'єднаємо вершини з Xs в одну вершину і з'єднаємо її з вершиною x2 гілкою з пропускною здатністю 5.
2. Оберемо вершини s=x1 і t=х3. Мінімальну пропускну здатність відносно джерела s=x1 і стоку
t=х3 має переріз з боками Xs={x1} і Xt={x2, x3, x4, x5, x6}. За теоремою величина максимальної течії між
вершинами x1 і x3 дорівнює пропускній здатності перерізу (Xs,Xt):
v13=v31=c(Xs,Xt)=2+4+2=8.
Об'єднаємо вершини x3, x4, x5, x6 в одну вершину і з'єднаємо її з вершиною x1 гілкою з пропускною здатністю 8.
3. Оберемо вершини s=x4 і t=х3. Мінімальну пропускну здатність відносно джерела s=x4 і стоку
t=х3 має переріз з боками Xs={x4} і Xt={x1, x2, x3, x5, x6}. За теоремою величина максимальної течії між
вершинами x4 і x3 дорівнює пропускній здатності перерізу (Xs,Xt):
v43=v34=c(Xs,Xt)=2+5+4=11.
Об'єднаємо вершини x3, x5, x6 в одну вершину і з'єднаємо її з вершиною x4 гілкою з пропускною здатністю 11.
4. Оберемо вершини s=x5 і t=х3. Мінімальну пропускну здатність відносно джерела s=x5 і стоку
t=х3 має переріз з боками Xs={x5} і Xt={x1, x2, x3, x4, x6}. Величина максимальної течії між вершинами x5
і x3 дорівнює пропускній здатності перерізу (Xs,Xt):
v53=v35=c(Xs,Xt)=5+4=9.
Об'єднаємо вершини x3, x6 в одну вершину і з'єднаємо її з вершиною x5 гілкою з пропускною здатністю 9.
5. Оберемо вершини s=x6 і t=х3. Мінімальну пропускну здатність відносно джерела s=x6 і стоку
t=х3 має переріз з боками Xs={x6} і Xt={x1, x2, x3, x4, x5}. Величина максимальної течії між вершинами x6
і x3 дорівнює пропускній здатності перерізу (Xs,Xt):
v63=v36=c(Xs,Xt)=5+2+4=11.
З'єднаємо вершину x3 з вершиною x6 гілкою з пропускною здатністю 11.
За останнім деревом перерізів легко знайти решту величин максимальних течій. Наприклад, v16=v61=8,
оскільки у ланцюгу дерева перерізів, що з'єднує вершини x1 і x6, мінімальна пропускна здатність гілок
дорівнює 8. Запишемо величини максимальних течій у вигляді матриці:
- |
5 |
8 |
8 |
8 |
8 |
5 |
- |
5 |
5 |
5 |
5 |
V= 8 |
5 |
- |
11 |
9 |
11 |
8 |
5 |
11 |
- |
9 |
11 |
8 |
5 |
9 |
9 |
- |
9 |
8 |
5 |
11 |
11 |
9 |
- |
Тут на перетині і-рядка і j-стовпця стоїть величина максимальної течії між вершинами xi і xj.