Algoritmus Edmonds-Karp řeší problém nalezení maximálního toku v transportní síti . Algoritmus je speciálním případem Ford-Fulkersonovy metody a běží v čase v grafu . Poprvé ji publikoval v roce 1970 sovětský vědec E. A. Dinitz . Později, v roce 1972, byl nezávisle objeven Edmondsem a Karpem .
Algoritmus Edmonds-Karp je variantou algoritmu Ford-Fulkerson, ve kterém se v každém kroku volí nejkratší komplementární cesta z do ve zbytkové síti (za předpokladu, že každá hrana má jednotkovou délku). Nejkratší cesta se najde hledáním do šířky .
K nalezení nejkratší cesty v grafu používáme vyhledávání na šířku :
V průběhu práce Edmonds-Karpův algoritmus najde každou komplementární cestu v čase . Níže ukážeme, že celkový počet zvýšení průtoku provedených tímto algoritmem je . Složitost Edmonds-Karpova algoritmu je tedy .
Nazvěme vzdálenost od vrcholu x k vrcholu y délkou nejkratší cesty z x do y ve zbytkové síti, měřenou počtem hran. Pokud taková cesta neexistuje, budeme vzdálenost považovat za nekonečnou. Řekneme, že y se přiblížilo x (odchýlilo se od x ), pokud se vzdálenost od x k y zmenšila (zvětšila). Řekneme, že y je blíže k x (dále od x ) než z , pokud je vzdálenost x k y menší (větší) než vzdálenost x k z .
Lemma . V průběhu algoritmu se žádný vrchol nikdy nepřiblíží ke zdroji. Důkaz . Ať tomu tak není, pak se s určitým zvýšením průtoku některé vrcholy přiblížily ke zdroji. Nazvěme je špatně. Vybereme jeden ze špatných vrcholů, který se po zvýšení průtoku ukázal být nejblíže zdroji (pokud jich je více, tak kterýkoli). Označte vybraný vrchol v . Uvažujme nejkratší cestu z s do v . Předposlední vrchol na této cestě označte u , takže cesta vypadá jako . Protože u je blíže k s než v a v je nejbližší nelegální vrchol k s , pak u je pravidelný vrchol. Značíme-li vzdálenosti od s do u a v před a po nárůstu toku, respektive jako , , , , máme:
,kde
Proto před zvýšením průtoku ve zbytkové síti chyběl oblouk ( u , v ). Aby se objevila, musela rozšiřující cesta obsahovat oblouk ( v , u ). Ale v Edmonds-Karpově algoritmu je rozšiřující cesta vždy nejkratší, takže
,což odporuje předchozí nerovnosti. Náš předpoklad byl tedy mylný. Lema je dokázáno.
Nazvěme kritické , že okraje augmentační cesty, jejichž zbytková kapacita je minimální. Odhadněme, kolikrát může být některá hrana (u, v) kritická. Ať se to stane při iteraci a příště při iteraci . Označením vzdálenosti od s do y v iteraci t máme:
Všimněte si, že při iteraci kritická hrana zmizí ze zbytkové sítě. Aby se v něm hrana (u, v) do doby iterace znovu objevila, je nutné, aby při nějaké mezi iteraci byla zvolena rozšiřující cesta obsahující hranu (v, u). Tudíž,
Pomocí dříve osvědčeného lemmatu dostaneme:
Protože zpočátku (jinak v = s, ale hrana vedoucí k s se nemůže objevit na nejkratší cestě od s do t) a vždy, když je samozřejmě menší než |V| (nejkratší cesta neobsahuje cykly, a proto obsahuje méně |V| hran), hrana může být ve většině případů kritická. Protože každá rozšiřující cesta obsahuje alespoň jednu kritickou hranu a celkový počet hran, které se jednoho dne mohou stát kritickými (všechny hrany původní sítě a jejich protilehlé), pak můžeme cestu zvětšit maximálně |E|·|V | jednou. Počet iterací tedy nepřesahuje O(|E|·|V|), což bylo třeba dokázat.
Nechť je dána síť se zdrojem ve vrcholu a mozkem ve vrcholu . Na obrázku dvojice označuje tok podél této hrany a její průchodnost.
Popišme v prvním kroku prohledávání do šířky.
Všimněte si, že vrcholy dosažitelné z A přesně v 1 kroku, přesně ve 2 krocích a přesně ve 3 krocích byly postupně přidány do fronty. Kromě toho je rodičem každého vrcholu vrchol dosažitelný z A přesně o 1 krok rychleji.
Kapacita cesty | Cesta |
---|---|
|
|
|
|
|
|
|
|
Všimněte si, že během provádění algoritmu se délky komplementárních cest (na obrázcích označeny červeně) nezmenšují. Tato vlastnost je splněna díky tomu, že hledáme nejkratší doplňkovou cestu .
Vylepšená verze Edmonds-Karpova algoritmu je Dinitzův algoritmus, který vyžaduje operace.
Pomocnou bezobrysovou síť grafu G se zdrojem s nazveme jejím podgrafem obsahujícím pouze ty hrany (u, v), pro které je minimální vzdálenost od s k v o jednu větší než minimální vzdálenost od s k u.
Dinitův algoritmus:
Algoritmy pro vyhledávání grafů | ||
---|---|---|
Neinformované metody | ||
Informované metody | ||
Zkratky | ||
Minimální kostra | ||
jiný |