Algoritmus Ford-Fulkerson řeší problém nalezení maximálního toku v dopravní síti .
Myšlenka algoritmu je následující. Hodnota průtoku je zpočátku nastavena na 0: pro všechny . Množství toku se pak iterativně zvyšuje hledáním rozšiřující cesty (cesta od zdroje k jímce, po které lze vysílat více toku). Proces se opakuje, dokud není nalezena rozšiřující cesta.
Je důležité, aby algoritmus přesně neurčoval, jakou cestu hledáme v kroku 2 nebo jak to děláme. Z tohoto důvodu je zaručeno, že algoritmus bude konvergovat pouze pro celočíselné šířky pásma, ale i pro ně, pro velké šířky pásma, může běžet velmi dlouho. Pokud jsou kapacity reálné, algoritmus může běžet neomezeně dlouho, aniž by došlo k konvergování k optimálnímu řešení (viz příklad níže ).
Pokud nehledáte žádnou cestu, ale tu nejkratší, dostanete Edmonds- Karpův algoritmus nebo Dinitsův algoritmus . Tyto algoritmy konvergují pro jakékoli reálné váhy v čase , resp.
Daný graf s kapacitou a tokem pro hrany od do . Je potřeba najít maximální průtok ze zdroje do dřezu . V každém kroku algoritmu platí stejné podmínky jako pro všechny toky:
Zbytková síť je síť s šířkou pásma a bez toku.
Vstupní graf se šířkou pásma , zdrojem a jímkou Výstup Maximální průtok od do
Cestu lze najít například prohledáváním do šířky ( algoritmus Edmonds-Karp ) nebo prohledáváním do hloubky v .
V každém kroku algoritmus přidá proud rozšiřující cesty k existujícímu proudu. Pokud jsou kapacity všech hran celá čísla, lze snadno indukcí dokázat, že toky přes všechny hrany budou vždy celá čísla. Proto v každém kroku algoritmus zvýší tok alespoň o jeden, takže bude konvergovat ve většině kroků, kde f je maximální tok v grafu. Každý krok je možné dokončit v čase , kde je počet hran v grafu, pak je celková doba běhu algoritmu omezena .
Pokud je kapacita alespoň jedné z hran iracionální číslo, pak může algoritmus běžet neomezeně dlouho, aniž by dokonce nutně konvergoval ke správnému řešení. Příklad je uveden níže.
Uvažujme síť zobrazenou vpravo se zdrojem , sink , hranami , , a kapacitou všech ostatních hran rovnou celému číslu . Konstanta je zvolena tak, že . Použijeme cesty ze zbytkového grafu uvedené v tabulce a , a .
Krok | Nalezená cesta | Přidáno vlákno | Zbytkové kapacity | ||
---|---|---|---|---|---|
0 | |||||
jeden | |||||
2 | |||||
3 | |||||
čtyři | |||||
5 |
Všimněte si, že po kroku 1, stejně jako po kroku 5, zbytkové schopnosti hran , a mají tvar , respektive , pro některé přirozené . To znamená, že můžeme použít rozšiřující cesty , , a nekonečně mnohokrát a zbytková kapacita těchto hran bude vždy ve stejném tvaru. Celkový průtok po kroku 5 je . V nekonečném čase bude celkový průtok konvergovat k , zatímco maximální průtok je . Algoritmus tedy nejen běží donekonečna, ale ani nekonverguje k optimálnímu řešení. [jeden]
Následující příklad ukazuje první kroky Ford-Fulkersonova algoritmu v transportní síti se čtyřmi uzly, zdrojem A a jímkou D . Tento příklad ukazuje nejhorší případ. Při použití prohledávání do šířky potřebuje algoritmus pouze 2 kroky.
Cesta | Šířka pásma | Výsledek |
---|---|---|
Počáteční dopravní síť | ||
Po krocích 1998... | ||
Cílová síť |