A Ford-Fulkerson algoritmus megoldja a szállítási hálózatban a maximális áramlás megtalálásának problémáját .
Az algoritmus ötlete a következő. Az áramlási érték kezdetben 0: for all . Az áramlás mennyiségét ezután iteratív módon növeljük egy növelő útvonal keresésével (az út a forrástól a nyelőig , amelyen több áramlást lehet továbbítani). A folyamatot addig ismételjük, amíg meg nem találjuk a bővítési útvonalat.
Fontos, hogy az algoritmus ne adja meg pontosan, hogy a 2. lépésben melyik útvonalat keressük, vagy azt hogyan tegyük. Emiatt az algoritmus garantáltan csak egész számú sávszélesség esetén konvergál, de még ezeknél is, nagy sávszélességeknél is nagyon sokáig futhat. Ha a kapacitások valósak, az algoritmus korlátlan ideig futhat anélkül, hogy konvergálna az optimális megoldáshoz (lásd a lenti példát ).
Ha nem bármelyik utat keresed, hanem a legrövidebbet, akkor az Edmonds-Karp algoritmust vagy a Dinits algoritmust kapod . Ezek az algoritmusok konvergálnak bármely valós súlyhoz időben , ill.
Adott egy gráf kapacitással és áramlással a -tól ig terjedő élekhez . Meg kell találni a maximális áramlást a forrástól a mosogatóig . Az algoritmus minden lépésére ugyanazok a feltételek vonatkoznak, mint az összes folyamra:
A maradék hálózat sávszélességű és áramlás nélküli hálózat.
Bemeneti grafikon sávszélességgel , forrással és nyelővel Kimenet Maximális áramlás tól ig
Az útvonalat például szélesség-első kereséssel ( Edmonds-Karp algoritmus ) vagy mélység-első kereséssel lehet megtalálni a -ban .
Az algoritmus minden lépésben hozzáad egy bővítő útvonaladatfolyamot a meglévő adatfolyamhoz. Ha az összes él kapacitása egész szám, akkor indukcióval könnyen igazolható, hogy az összes élen áthaladó áramlás mindig egész szám lesz. Ezért minden lépésben az algoritmus legalább eggyel növeli az áramlást, tehát legfeljebb lépésenként fog konvergálni, ahol f a maximális áramlás a grafikonon. Lehetőség van minden lépés végrehajtására időben , ahol a gráf éleinek száma, ekkor az algoritmus teljes futási ideje korlátozott .
Ha legalább az egyik él kapacitása irracionális szám, akkor az algoritmus korlátlan ideig futhat anélkül, hogy szükségszerűen konvergálna a helyes megoldáshoz. Az alábbiakban egy példa látható.
Tekintsük a jobb oldalon látható hálózatot, amelynek forrása , nyelője , élkapacitása , és az összes többi él kapacitása egyenlő egész számmal . Az állandót úgy választjuk meg, hogy . A táblázatban megadott maradék gráf útvonalait használjuk, és , és .
Lépés | Talált út | Hozzáadott szál | Maradék kapacitások | ||
---|---|---|---|---|---|
0 | |||||
egy | |||||
2 | |||||
3 | |||||
négy | |||||
5 |
Vegye figyelembe, hogy az 1. lépés után, valamint az 5. lépés után az élek maradványképességei , és alakja , illetve bizonyos természetes . Ez azt jelenti, hogy , , és végtelenül sokszor használhatjuk, és ezeknek az éleknek a maradék kapacitása mindig azonos formában lesz. A teljes áramlás az 5. lépés után . Végtelen idő alatt a teljes áramlás a -hoz konvergál , míg a maximális áramlás . Így az algoritmus nemcsak korlátlan ideig fut, de még csak nem is konvergál az optimális megoldáshoz. [egy]
A következő példa a Ford-Fulkerson algoritmus első lépéseit mutatja be egy négy csomóponttal, A forrással és D nyelővel rendelkező közlekedési hálózatban . Ez a példa a legrosszabb esetet mutatja be. Szélesség szerinti keresés esetén az algoritmusnak csak 2 lépésre van szüksége.
Pálya | Sávszélesség | Eredmény |
---|---|---|
Kezdeti közlekedési hálózat | ||
1998-as lépések után... | ||
Célhálózat |