Sieci przepływowe i graf resztkowy
Sieć przepływu to skierowane graf, w którym każda krawędź (u,v) ma pojemność c(u,v) ≥ 0, wraz z źródłem s i drenem t. Poprawny przepływ musi przestrzegać ograniczenia pojemności na każdej krawędzi oraz zasady zachowania się w każdym węźle wewnętrznym – czyli dokładnie prawo Kirchhoffa dotyczące natłoku dla wody lub elektryczności. Centralnym pomysłem stojącym za każdym algorytmem max-flow jest graf resztkowy G_f, który śledzi, ile dodatkowego przepływu można jeszcze przesłać wzdłuż krawędzi, a także – co najważniejsze – ile istniejącego przepływu można "odwrócić", przesyłając go wstecz. Ta sztuczka z odwrotną krawędź umożliwia częściowe anulowanie wczesnego, pochopnego wyboru, jeśli okaże się on nieoptymalny, bez konieczności cofania się po oryginalnym grafie.
Ford-Fulkerson i Edmonds-Karp
Ford i Fulkerson (1956) zaproponowali wielokrotne znajdowanie dowolnej ścieżki rozszerzającej z s do t w grafie resztkowym oraz przesyłanie przepływu równego jej pojemności wąskiego gardła, aż nie pozostaną żadne ścieżki. Jednakże metoda ta nie określa, jak znaleźć tę ścieżkę, a naiwne DFS może wymagać tyle iteracji, ile maksymalny przepływ – miliony na małym grafie z dużymi pojemnościami całkowitoliczbowymi. Edmonds i Karp (1972) poprawili to jednym ulepszeniem: zawsze wybierać najkrótszą ścieżkę rozszerzającą za pomocą BFS. Ponieważ najmniejsza odległość w drodze od s do dowolnego wierzchołka jest monotonicznie nie malejąca w iteracjach, każdy krawędź może stać się krytyczna najwyżej O(V) razy, co daje autentyczny wielopowietnościowy wynik O(VE²) niezależny od wartości pojemności.
Twierdzenie o cięciu s-t
Cięcie s-t dzieli wierzchołki na S (zawierające s) i T (zawierające t); jego pojemność to całkowita pojemność krawędzi przecinających z S do T. Twierdzenie o cięciu s-t (Ford i Fulkerson, 1956) mówi, że maksymalna wartość przepływu równa się dokładnie minimalnej pojemności cięcia dla wszystkich takich podziałów — każdy jednostkowy przepływ musi przeciąć cięcie co najmniej raz (dwójność słabego), a w optymalnym przypadku wszystkie krawędzie s→T są nasycone, a wszystkie krawędzie t→S przenoszą zero przepływu. To dwójstwo oznacza, że znalezienie najtańszego zestawu połączeń do przerwania — najsłabszego punktu w łańcuchu dostaw lub najbardziej podatnych połączeń w sieci — jest darmowe.
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)
Algorytm Dinica i dopasowywanie bipartytne
Algorytm Dinica (1970) buduje "graf poziomów" za pomocą BFS, znajduje blokujący przepływ w nim za pomocą DFS, a następnie powtarza to – na każdej fazie BFS poziom t rośnie ściśle, ograniczając czas działania do O(V) faz i O(V²E) w sumie, co spada do O(E√V) na grafach o pojemności jednostkowej. Ten szczególny przypadek ma ogromne znaczenie: maksymalne dopasowywanie bipartytne – łączenie pracowników z zadaniami, np. – redukuje się bezpośrednio do maksymalnego przepływu poprzez dodanie superźródła i superzbiornika z krawędziami o pojemności 1 wszędzie. Ponieważ twierdzenie integralności gwarantuje wartością całkowitą optymalny przepływ, gdy wszystkie pojemności są liczbami całkowitymi, wynikowy przepływ jest automatycznie ważnym dopasowaniem 0/1, a Dinic na tej redukcji to słynny algorytm Hopcrofta-Karpa w ukryciu.
Frequently asked questions
Co mówi twierdzenie o maksymalnym przepływie i minimalnym cięciu?
Twierdzenie o maksymalnym przepływie i minimalnym cięciu mówi, że maksymalny przepływ z źródła do ujścia równa się minimalnej pojemności jakiegokolwiek podziału wierzchołków (cięcia s-t), który oddziela źródło od ujścia. Oznacza to, że każdy algorytm maksymalnego przepływu jest jednocześnie algorytmem minimalnego cięcia: obliczając maksymalny przepływ, otrzymujemy również najtańszy zbiór krawędzi, którego usunięcie odłączy źródło od ujścia.
Dlaczego Edmonds-Karp ulepsza prosty algorytm Forda-Fulkersona?
Algorytm Forda-Fulkersona nie określa, jak znaleźć ścieżkę wzmocnienia, a naiwne wybieranie ścieżki DFS może wymagać nawet maksymalnego przepływu w iteracjach – miliony na małym grafie z dużymi pojemnościami. Edmonds-Karp rozwiązuje to, zawsze wybierając najkrótszą ścieżkę wzmocnienia za pomocą BFS, co gwarantuje czas O(VE²) niezależnie od wartości pojemności.
Jak maksymalne dopasowanie dwustronne redukuje się do maksymalnego przepływu?
Dodaj superźródło połączone z każdym wierzchołkiem lewej strony i superujście podłączone od każdego wierzchołka prawej strony, wszystkie o pojemności 1, a każdą oryginalną krawędź o pojemności 1. Ponieważ wszystkie pojemności są całkowite, twierdzenie o całkowitości gwarantuje maksymalny przepływ o wartości całkowitej na każdej krawędzi, więc każdy jednostkowy przepływ śledzi dokładnie jedno poprawne dopasowanie – maksymalny przepływ równa się rozmiarowi maksymalnego dopasowania.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz the simulation i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację the simulation