ГоловнаСтаттіМережі

Максимальний Потік / Мінімальна Різа: Як Алгоритм Форда-Фулкерона Знаходить Вузол

Який обсяг води може пройти через мережу труб, перш ніж певний вузол обмежить її? Відповідь — один із найелегантніших результатів у теорії графів.

mysimulator teamОновлено — червень 2026≈ 9 хв читання▶ Відкрити симуляцію

Мережі потоків та залишковий граф

Мережа потоків — це спрямована графа, де кожний ребро (u,v) має ємність c(u,v) ≥ 0, з джерелом s і стоком t. Валідний потік повинен відповідати обмеженню ємності на кожному ребрі та закону збереження в кожному внутрішньому вузлі — точно закону про струм води або електрики Кірхгоффа. Центральною ідеєю кожного алгоритму максимального потоку є залишковий граф G_f, який відстежує, скільки додаткового потоку все ще можна «штовхати» вздовж ребра, та — що особливо важливо — скільки існуючого потоку може бути «скасовано» шляхом його «перевороту» в зворотному напрямку. Цей трюк із зворотним ребром дозволяє ранньому жадібному вибору частково скасувати, якщо виявляється, що він неоптимальний, без необхідності повертатися назад по оригінальній графу.

Поточний стан алгоритму

Алгоритм потоку по мережі (Ford-Fulkerson) працює так: знаходимо будь-який шлях від джерела до стока в решті графа, визначаємо мінімальний пропускну здатність цього шляху та збільшуємо потік вздовж нього на цю величину. Потім повторюємо процес для пошуку наступного шляху, поки не буде знайдено оптимальне рішення.

Алгоритм Форда-Фулкерсона був запропонований Фордом і Фулкерсоном (1956) та передбачав багаторазове пошуки будь-якого шляху від джерела до стока в решті графа, визначення мінімальної пропускної здатності цього шляху та збільшення потоку вздовж нього на цю величину, поки не будуть знайдені всі можливі шляхи. Однак метод не визначав, як знайти цей шлях, і незбагненний пошук DFS міг вимагати стільки ж ітерацій, скільки максимальний потік - мільйони на маленькій графі з великими цілочисельними значеннями пропускної здатності.

Едмонс і Карп (1972) виправили це одним змінами: завжди брати найкоротший шлях від джерела до будь-якого вершини за допомогою BFS. Оскільки найкоротша відстань від джерела до будь-якої вершини є монотонно не спадною на кожній ітерації, кожен край може стати критичним не більше ніж O(V) разів, що дає справжню поліноміальну межу O(VE²) незалежно від значень пропускної здатності.

Теорема про максимальний потік / мінімальний розріз

Розріз s-t розділяє вершини на S (містить s) та T (містить t); його місткість – це сумарна міцність ребер, що перетинають з S в T. Теорема про максимальний потік / мінімальний розріз (Форд і Фулкерон, 1956) стверджує, що максимальне значення потоку точно дорівнює мінімальній міцності розрізу для всіх таких розділів – кожен елемент потоку повинен перетинати розріз принаймні один раз (слабка подвійність), і на оптимумі всі ребра s→t насичені, а всі ребра t→s несуть нульовий потік. Це дуалізм означає, що знайти найдешевшу гру зв’язків для розрізання – найслабку точку в ланцюгу постачання або найбільш вразливі з’єднання у сітки – випадає набагато легше, ніж обчислюється за допомогою максимального потоку.

max |f|  over all valid flows f   =   min cap(S,T)  over all s-t cuts (S,T)

Edmonds-Karp:  O(V·E²)   (shortest augmenting path via BFS)
Dinic's:       O(V²·E) — O(E·√V) on unit-capacity graphs (bipartite matching)

Алгоритм Dinіка та бінарне зіставлення

Алгоритм Dinіка (1970) будує "рівень граф" за допомогою BFS, знаходить блокуючий потік всередині нього за допомогою DFS, а потім повторює — рівень BFS від t строго збільшується на кожному етапі, обмежуючи час виконання до O(V) етапів та O(V²E) загалом, зменшуючись до O(E√V) на графах з одиничною місткості. Цей особливий випадок має величезне значення: максимальне бінарне зіставлення — паркування робітників із завданнями, скажімо — безпосередньо знижується до максимального потоку шляхом додавання супер-джерела та супер-стоку з місткостями 1 у всіх напрямках. Оскільки теорема про цілість гарантує цілочисельне оптимальне значення потоку, коли всі міцності є цілими, отриманий потік автоматично є дійсним 0/1 зіставленням, і Dinіk на цьому зменшенні — відомий алгоритм Hopcroft-Karp у прихованому вигляді.

Часті запитання

Що стверджує теорема про максимальний потік та мінімальний розріз?

Максимальний потік від джерела до стоку точно дорівнює мінімальній здатності будь-якого розрізу s-t — розділу вершин, який відокремлює джерело від стоку. Це означає, що кожен алгоритм максимального потоку одночасно є алгоритмом мінімального розрізу: обчисливши максимальний потік, ви також знайдете найдешевшіший набір ребер, видалення якого від’єднує джерело від стоку.

Чому Edmonds-Karp покращує порівняно з простим Ford-Fulkerson?

Ford-Fulkerson не визначає, як знаходити поглинаючий шлях, і наївний DFS-заснований вибір може потребувати до максимального потоку значення в ітераціях — мільйони на невеликому графі з великими ємностями. Edmonds-Karp усуває це, завжди вибираючи найкоротший поглинаючий шлях за допомогою BFS, що гарантує час O(VE²) незалежно від значень ємностей.

Як максимальне бінарне зіставлення зводиться до максимального потоку?

Додайте супер-джерело, підключене до кожного вершини лівого боку, та супер-сток, підключений від кожної вершини правого боку, обидва з ємністю 1, і дайте кожне оригінальне ребро ємність 1. Оскільки всі ємності цілі числа, теорема про цілісності гарантує максимальний потік, який має цілісні значення на кожному ребрі, тому кожен одиницю потоку відстежує точно одне дійсне зіставлення — максимальний потік дорівнює розміру максимального зіставлення.

Спробуйте наживо

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

▶ Відкрити симуляцію the simulation

Що ви знайшли?

Додати кроки відтворення (опційно)