- •Розділ 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)
- •Приклад реалізації алгоритму Гоморі — Ху. Числа, приписані дугам, відповідають їх пропускним здатностям.
Крок 3. Повторювати крок 2 доти, доки або стік — вершина хt — буде позначена, або вершина хt буде не
позначена і ніяких інших позначок не можна буде розмістити. В першому випадку переходимо до операції Б, а в другому випадку алгоритм закінчує роботу з максимальною течією . У другому випадку множина позначених вершин і множина непозначених вершин утворюють два боки мінімального перерізу (Xs, Xt).
Операція Б (збільшення течії).
Крок 4. Покласти х = хt і перейти до кроку 5.
Крок 5. Якщо позначка у вершині х має вигляд (+z,l(х)), то змінити течію вздовж дуги (z,х) з (z,х) на(z,х)+l(х).
Якщо позначка у вершині x має вигляд (-z,l(х)), то змінити течію вздовж дуги (х,z) з (х,z) на (х,z)-l(х).
Крок 6. Якщо z=хs, то стерти всі позначки і
повернутися до кроку 1, щоб знов почати розміщувати позначки, але використовуючи вже поліпшену течію, що знайдена на кроці 5. Якщо z хs,
то взяти х=z і повернутися до кроку 5.
Алгоритм розміщення позначок (операція А) зображує пошук шляху від джерела хs до стоку хt
вздовж якого можна збільшити течію, не перевершуючи пропускних здатностей на дугах і зберігаючи течію у проміжних вершинах. Якщо стік виявився позначеним, то такий шлях (відповідно — аугментальний ланцюг) знайдений і вздовж нього легко збільшити течію. Якщо ж операція А закінчилася, а стік виявився непозначеним, то течія була максимальною — її не можна збільшити. Множина дуг, що ведуть з позначених вершин до непозначених, утворює мінімальний переріз, оскільки позначені вершини саме складають множину Xs.
Приклад. Знайти максимальну течію у мережі.
1. Візьмемо течію, що зображена на рисунку як початкова припустима течія. Вона має величину 3.
2. Привласнимо джерелу, вершині х1, позначку (+, ). Вершина х1 позначена, але не переглянута.
3. Переглянемо вершини, суміжні з вершиною х1. Вершині х2 привласнимо позначку (+х1,1), а вершині
х3 — позначку (-х1,2) ( (х1,х2)=5<6=c1, (х3,х1)=2>0). Вершина х1 позначена і переглянута, а вершини х2 і х3
позначені, але не переглянуті.
4. Переглянемо вершини, суміжні з вершиною х3. Із вершин, суміжних з вершиною х3, не позначені вершини х4 і х5. Вершині х4 привласнимо позначку (- х3,2), оскільки (х4,х3)=4>0 і min(2,4)=2. Вершину х5 не позначаємо, оскільки (х5, х3) = 0.
5.Переглянемо вершини, суміжні з вершиною х2. Вершині х5 привласнимо позначку (+х2,1), оскільки(х2,х5)=7<8=c5. Стік позначений. Переходимо до операції Б — збільшення течії.
6.Стік має позначку (+х2,1). Тому збільшуємо течію вздовж дуги (х2, х5) на 1.
7.Вершина х2 має позначку (+х1,1). Тому збільшуємо течію вздовж дуги (х1,х2) на 1. Ми одержали нову течію величини 4.
8.Стираємо всі позначки.
9. Привласнюємо вершині х1 позначку (+, ).
10. Переглянемо вершини, суміжні з вершиною х1. Вершині х3 привласнимо позначку (-х1,2). Вершину х2 не позначаємо, оскільки (х1,х2)=6=c(y1).
11. Переглянемо вершини, суміжні з вершиною х3. Вершині х4 привласнимо позначку (-х3,2), оскільки(х4,х3)=4>0, l(х3)=2 i min(2,4)=2.
12. Переглянемо вершини, суміжні з вершиною х4. Вершині х5 привласнимо позначку (-х4,2), оскільки(х5,х4)=4>0, l(х4)=2 і min(2,4)=2. Стік позначений. Переходимо до операції Б — збільшення течії.
13.Стік має позначку (-х4,2). Тому зменшуємо течію вздовж дуги (х5,х4) на 2.
14.Вершина х4 має позначку (-х3,2). Тому зменшуємо течію вздовж дуги (х4,х3) на 2.
15.Вершина х3 має позначку (-х1,2). Тому зменшуємо течію вздовж дуги (х3, х1) на 2. Ми одержали нову течію величини 6. Ця течія є максимальною.
Перевіримо це.