Ford-Fulkerson algoritmus

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. április 29-én felülvizsgált verziótól ; az ellenőrzések 3 szerkesztést igényelnek .

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.

Algoritmus

Informális leírás

  1. Az összes adatfolyamot visszaállítjuk. A maradék hálózat kezdetben egybeesik az eredeti hálózattal.
  2. A maradék hálózatban bármilyen utat megtalálunk a forrástól a nyelőig. Ha nincs ilyen út, megállunk.
  3. A talált úton (ezt növekvő útnak vagy növekvő láncnak nevezik ) átengedjük a lehetséges maximális áramlást:
    1. A maradék hálózatban megtalált útvonalon minimális kapacitású élt keresünk .
    2. A talált út minden élére növeljük az áramlást -vel , ellenkező irányban pedig -kal csökkentjük .
    3. Módosítjuk a maradék hálózatot. A talált útvonalon lévő összes élre, valamint a velük szemben lévő (antipárhuzamos) élekre kiszámítjuk az új kapacitást. Ha nem nulla lesz, akkor egy élt adunk a maradék hálózathoz, ha pedig nulla lesz, akkor töröljük.
  4. Visszatérünk a 2. lépéshez.

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.

Formai leírás

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

  1. minden élhez
  2. Mindaddig, amíg van egy olyan útvonal , amely minden élre vonatkozik :
    1. megtalálja
    2. Minden élhez

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 .

Nehézség

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ó.

Példa egy nem konvergáló algoritmusra

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]

Példa

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

Lásd még

Linkek

Irodalom

Jegyzetek

  1. Zwick, Uri. A legkisebb hálózatok, amelyeken a Ford-Fulkerson maximális áramlási eljárás nem fejeződik be  //  Theoretical Computer Science : folyóirat. - 1995. - augusztus 21. ( 148. évf. , 1. sz.). - 165-170 . o . - doi : 10.1016/0304-3975(95)00022-O .