Алгоритм Форда — Фалкерсона

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Алгоритм або метод Форда — Фалкерсона знаходить максимальний потік у транспортній мережі.

Метод Форда — Фалкерсона — метод, який базується на трьох концепціях: залишкові мережі, шляхи що збільшуються і розрізи.[1] Ключову роль у методі Форда — Фалкерсона грають два поняття: залишкові мережі і доповнюють шляху.  Дані концепції лежать в основі важливої теореми про максимальний потік і мінімальний розріз, яка визначає значення максимального нащадка за допомогою розрізів траспортної мережі. Метод Форда — Фалкерсона є ітеративним. Спочатку величині потоку присвоюється значення 0: при будь-яких , Є . На кожній ітерації величина потоку збільшується за допомогою пошуку «шляху, що збільшується» (тобто деякого шляху від джерела до стоку , уздовж якого можна послати більший потік) і подальшого збільшення потоку. Цей процес повторюється до тих пір, поки вже неможливо буде відшукати збільшуючийся шлях.

Алгоритми[ред. | ред. код]

Нехай граф, і для кожного ребра з в , нехай буде ємність і буде потік. Ми хочемо знайти максимальний потік від джерела до раковини . Після кожного кроку в алгоритмі виходить наступне:

Обмеженість потенціалу: Потік уздовж краю не може перевищувати свій потенціал.
Косі симетрії: Чистий потік від до повинен бути протилежністю чистого припливу від до (див приклад).
Збереження потоку: Тобто, якщо не або . Чистий потік до вузла дорівнює нулю, для джерела, який «виробляє» потік, і раковину, яка «поглинає» потік.
Значення (F): Тобто, потік виходячи з повинен бути рівним потоку, що надходить у .

Це означає, що потік через мережу є легальним потоком після кожного раунду в алгоритмі. Визначимо залишкову мережу , щоб бути в мережі з потужністю , і без потоку. Зверніть увагу, що може статися, що потік від до дозволений в залишковій мережі, хоча заборонений в вихідній мережі: якщо та , тоді .

Алгоритм Форда — Фалкерсона[ред. | ред. код]

Алгоритм:

На першому етапі джерелу присвоюється позначка нескінченність. На цьому етапі всі інші вузли не помічені. Постараємося розставити позначки дійшовши до стоку T®S.

1. Дійшовши до стоку йому приписуємо позначку [qij, k].

2. Шлях потоку від джерела буде знайдений і потік для кожної дуги цього шляху збільшиться на величину qt.

3. Дійшовши до стоку ми почнемо розставляти позначки спочатку, при цьому необхідно стежити, щоб залишкова пропускна здатність всіх дуг була перевищена.

4. Сток не може бути позначений, це означає, що потік не може бути збільшений і що знайдений потік на попередніх кроках є максимальним.

Ford Fulkerson Method ()
1. Задаємо початкове значення потоку ;
2. while (Поки) існує шлях що збільшується ;
3. do збільшуємо потік  уздовж шляху ;
4. return ;

Розріз[ред. | ред. код]

Існує теорема про максимальний потік в мережі, вона полягає в тому, що максимальний потік в мережі дорівнює її мінімального розрізу.

Розріз — це безліч дуг виключення яких ділить всі безліч вузлів в мережі на 2 непересічних частини.

Пропускна здатність розрізу — це сума пропускної здатності дуг входять в розріз.

Відповідно до цієї теореми ми можемо побудувати і розглянути всі розрізи і знайти мінімум — це максимум пропускної здатності даної мережі. Але з цієї теоремі ми не можемо знайти всі потоки проходять по дугах мережі. Використовуються позначки для вказівки величини потоку і його джерело.

Наприклад, якщо з вершини i в j передається qj одиниць потоку і ця добавка викликає збільшення потоку по дузі, то вузлу j приписується позначка [qj, i], якщо ж величина потоку qj викликає зменшення потоку по цій дузі, то вузлу j присвоюється позначка [ -qij, i].

[qj, i] — пряма дуга; [-qj, i] — зворотна дуга.

Потік по кожній прямій дузі збільшується, при цьому він не повинен перевищувати її пропускну спроможність, а потік по кожній зворотного дузі зменшується, але при цьому він не повинен ставати негативним.

Залишкові мережі[ред. | ред. код]

Залишкова мережа — мережа, що складається з ребер, що допускають збільшення потоку. Більш строго, нехай дана транспортна мережа з джерелом і стоком . Нехай  — деякий потік в . Розглянемо пару вершин ,. Величина додаткового потоку, який ми можемо направити з в , не перевищивши пропускну спроможність , є залишковою пропускною здатністю ( residual capacity ) ребра (), і задається формулою . Наприклад, якщо і , то можна збільшити на , не порушивши обмеження пропускної спроможності для ребра . Коли потік негативний, то залишкова пропускна спроможність більше ніж пропускна спроможність . Так, якщо . Цю ситуацію можна зобразити наступним чином: існує потік величиною 4 одиниці з в , не порушивши обмеження пропускної здатності для ребра . Таким чином, починаючи з потоку , ми направили додаткові 20 одиниць потоку, перш ніж досягли обмеження пропускної спроможності. Для заданої транспортної мережі і потоку , залишкової мережі (residual network) в , породженої потоком , є мережа , де .

Малюнок 1

На Мал. 1 зображені:
а) Транспортна мережа  і потік .
б) Залишкова мережа  з виділеним збільшуючимся шляхом; його залишкова пропускна здатність дорівнює.
в) Потік в мережі , отриманий в результаті збільшення потоку уздовж шляху  на величину його залишкової пропускної здатності.
г) Залишкова мережу, породжена потоком, показаним в частині в)

Таким чином, як і зазначалося вище, по кожному ребру залишкової мережі, або залишковим ребру (residual edge) , можна направити потік, більший 0. На Малюнку 1 (а) відтворені транспортна мережа і потік , представлені на рисунку 1 (б), а на Малюнку 1 (б), показана відповідна залишкова мережа . Ребрами є або ребра , або зворотні їм. Якщо для деякого ребра , то і . Якщо для деякого ребра , то . У такому випадку і, отже, . Якщо у вихідній мережі немає ні ребра , ні , то , і . Таким чином, можна зробити висновок, що ребро може опинитися в остаточній мережі тільки в тому випадку, якщо хоча б одне з ребер або знаходиться у вихідній транспортній мережі, тому: Зверніть увагу, що залишкова мережа є транспортною мережею зі значеннями пропускних спроможностей, заданими . Наступна лема показує, як потік у залишковій мережі пов'язаний з потоком у вихідній транспортній мережі.


Для збереження потоку, при всіх виконується рівність . І тоді, .

Шляхи, що збільшуються[ред. | ред. код]

Для заданої транспортної мережі і потоку шляхом, що збільшується ( augmenting path) є простий шлях з в в залишковій мережі . Згідно з визначенням залишкової мережі, кожне ребро шляху, що збільшується допускає деякий додатковий позитивний потік з в без порушення обмеження пропускної здатності для даного ребра. Виділений шлях на Малюнку 1 (б) є шляхом, що збільшується. Розглядаючи представлену на малюнку залишкову мережу як як деяку транспортну мережу, можна збільшувати потік уздовж кожного ребра даного шляху аж до 4 одиниць, не порушуючи обмежень пропускної здатності, оскільки найменша залишкова пропускна спроможність на даному шляху становить . Максимальна величина, на яку можна збільшити потік уздовж кожного ребра шляху, що збільшується і задається формулою .

Розрізи транспортних мереж[ред. | ред. код]

У методі Форда — Фалкерсона проводиться неодноразове збільшення потоку уздовж шляхів, що збільшуються до тих пір, поки не буде знайдений максимальний потік. Для доказу даної теореми вводимо поняття розрізу. Розрізом (CUT) транспортної мережі називається розбиття множини вершин на безлічі і , такі що , а . Якщо  — потік, то чистий потік (net flow) через розріз за визначенням дорівнює . Пропускною здатністю (capacity) розрізу є . Мінімальним розрізом (minimum cut) мережі є розріз, пропускна здатність якого серед всіх розрізів мережі мінімальна. На Малюнку 2 показаний розріз транспортної мережі. Чистий потік через даний розріз дорівнює , а пропускна здатність цього розрізу дорівнює . Зверніть увагу, що чистий потік через розріз може включати в себе негативні потоки між вершинами, але пропускна здатність розрізу складається виключно з невід'ємних значень. Іншими словами, чистий потік через розріз складається з позитивних потоків в обох напрямках; позитивний потік з в додається, а позитивний потік з в віднімається. З іншого боку, пропускна здатність розрізу обчислюється тільки по ребрах, що йде з в . Ребра, що ведуть з в , не беруть участі в обчисленні . Наступна лема показує, що чистий потік через будь розріз однаковий і дорівнює величині потоку.

Малюнок 2. Розріз (S, T) транспортної мережі, представленої на рисунку 1 (б), S = {s, v 1 , v 2 }, T = {v 3 , v 4 , t} . Вершини, що належать S , відзначені чорним кольором, а вершини T  — білим.

Теорема про максимальний потік і мінімальний розріз[ред. | ред. код]

Якщо  — деякий потік в транспортній мережі з джерелом і стоком , то наступні твердження еквівалентні. 1.  — максимальний потік в . 2. Залишкова мережа не містить збільшують шляхів. 3. для деякого розрізу мережі .

Доведення[ред. | ред. код]

(1) → (2): Припустимо, що є максимальним потоком в , але містить збільшує шлях . Відповідно до наслідку Леми 2, сума потоків , де задається рівнянням з наслідку Леми 3, є потоком в , величина якого суворо більше, ніж , що суперечить припущенню, що  — максимальний потік.

(2) → (3): Припустимо, що не містить збільшуючого шляху, тобто не містить шляху з в . Визначимо існує шлях з . Розбиття є розрізом: очевидно, що , а не належить , оскільки в не існує шляху з в . Для кожної пари вершин справедливо співвідношення , оскільки в іншому випадку і слід помістити в множину . Отже, згідно Леми 3, .

(3) → (1): Згідно наслідку Леми 3, для всіх розрізів , тому з умови випливає, що  — максимальний потік.

Леми[ред. | ред. код]

Лема 1[ред. | ред. код]

Нехай  — транспортна мережа з джерелом і стоком , а  — потік в . Нехай  — залишкова мережа в , породжена потоком , а  — потік в . Тоді сума потоків , обумовлена рівнянням, є потоком в , і величина цього потоку дорівнює

Доведення[ред. | ред. код]

Для , справедливо: . Так як для всіх . То випливає, що .

Лема 2[ред. | ред. код]

Нехай  — транспортна мережа, а  — деякий потік в , і нехай  — деякий шлях, що збільшується у . Визначимо функцію наступним чином: якщо належить , якщо належить , в іншому випадку. Тоді є потоком в і його величина становить . Випливає з даної леми наслідок показує, що якщо додати до , то ми отримаємо новий потік в , величина якого ближче до максимальної. На Малюнку 1 (в), показаний результат додавання , представленого на рисунку 1 (б), до , показаному на рисунку 1 (а).

Лема 3[ред. | ред. код]

Нехай  — деякий потік в транспортній мережі з джерелом і стоком , і нехай  — розріз . Тоді чистий потік через дорівнює .

Доведення[ред. | ред. код]

Зауважимо, що відповідно до властивості збереження потоку , так що . Безпосереднім наслідком леми є доведений раніше результат — що величина потоку дорівнює сумарному потоку, що входить в стік. Інший наслідок леми показує, як пропускні спроможності розрізів можна використовувати для визначення кордону величини потоку.

Наслідок[ред. | ред. код]

Величина будь-якого потоку у транспортній мережі не перевищує пропускну спроможність довільного розрізу .

Доведення[ред. | ред. код]

Нехай  — довільний розріз , а  — деякий потік. Згідно з попередньою лемою і обмеженням пропускної здатності,

З цього наслідку випливає, що максимальний потік в мережі не перевищує пропускної здатності мінімального розрізу. Зараз ми сформулюємо і доведемо важливу теорему про максимальний потік і мінімальний розріз, в якій стверджується, що значення максимального потоку дорівнює пропускній здатності мінімального розрізу.

Дослідження[ред. | ред. код]

Вперше проблеми пов'язані з пересилкою потоків у мережах були розглянуті Канторовичем в 1933 році. (Більше того — він розглядав більш загальну задачу з рухом потоку рідин різних типів (multicommodity flows)). Основи теорії потоків були закладені в період з листопада 1954 по грудень 1955 дослідниками корпорації RAND (Санта-Моніка, Каліфорнія). Простежимо за розвитком теорії потоків у хронологічному порядку за звітами RAND.

Перший звіт «Максимальний потік в мережі» датується 19 м листопада 1954. Автори звіту — Форд (Ford) і Фалкерсоном (Fulkerson), довели теорему про максимальний потік і мінімальному розрізі для неорієнтованих графів: значення максимального потоку в мережі одно мінімальної пропускної здатності розрізу. (Розрізом в мережі називається розбиття множини її вершин на два непересічних класу, таких що джерело і стік лежать у різних класах. Пропускний здатністю розрізу називається сума пропускних спроможностей ребер, кінці яких лежать в різних класах.) У 1955 році в роботі Робахера (Robacher) було згадано, що вперше цю теорему довів Фалкерсоном.

Робота Форда і Фалкерсона про потоки і розрізах була мотивована вивченням транспортних мереж залізниць (див. Далі). У тому ж звіту вони також описали простий алгоритм знаходження максимального потоку для планарних графів, що володіють такими додатковим властивістю: після додавання дуги з джерела в стік граф залишається планарним.

Примітки[ред. | ред. код]

  1. Томас Кормен; Чарльз Лейзерсон, Рональд Рівест, Кліфорд Стайн (2009) [1990]. 26.2 The Ford-Fulkerson method. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. с. 714—731. ISBN 0-262-03384-4.

Посилання[ред. | ред. код]