Edmonds-Karps algoritm löser problemet med att hitta det maximala flödet i ett transportnätverk . Algoritmen är ett specialfall av Ford-Fulkerson- metoden och går i tid i grafen . Den publicerades första gången 1970 av den sovjetiske vetenskapsmannen E. A. Dinitz . Senare, 1972, upptäcktes den oberoende av Edmonds och Karp .
Edmonds-Karp- algoritmen är en variant av Ford-Fulkerson-algoritmen där den kortaste komplementära vägen från till i det återstående nätverket väljs vid varje steg (förutsatt att varje kant har enhetslängd). Den kortaste vägen hittas med bredd-först sökning .
För att hitta den kortaste vägen i en graf använder vi bredd-först-sökning :
Under arbetets gång kommer Edmonds-Karps algoritm att hitta varje kompletterande väg i tiden . Nedan kommer vi att bevisa att det totala antalet flödesökningar som utförs av denna algoritm är . Således är komplexiteten hos Edmonds-Karp-algoritmen .
Låt oss kalla avståndet från vertex x till vertex y för längden på den kortaste vägen från x till y i det återstående nätverket, mätt med antalet kanter. Om det inte finns någon sådan väg kommer vi att betrakta avståndet som oändligt. Vi kommer att säga att y har närmat sig x (avvikit från x ) om avståndet från x till y har minskat (ökat). Vi kommer att säga att y är närmare x (längre bort från x ) än z om avståndet från x till y är mindre (större) än avståndet från x till z .
Lemma . Under algoritmens gång närmar sig inget hörn någonsin källan. Bevis . Låt detta inte vara fallet, då med en viss ökning av flödet, närmade sig några toppar källan. Låt oss kalla dem fel. Vi väljer en av de felaktiga hörnen, som efter att ha ökat flödet visade sig vara närmast källan (om det finns mer än en av dem, då någon av dem). Beteckna det valda hörnet med v . Betrakta den kortaste vägen från s till v . Beteckna den näst sista spetsen på denna väg med u , så att banan ser ut som . Eftersom u är närmare s än v och v är den olagliga hörn som ligger närmast s , så är u en vanlig hörn. Betecknar avstånden från s till u och v före respektive efter flödesökningen , som , , , , har vi:
,var
Därför, före ökningen av flödet, var bågen ( u , v ) frånvarande från det kvarvarande nätverket. För att den skulle visas måste den utökade banan innehålla en båge ( v , u ). Men i Edmonds-Karp-algoritmen är förstärkningsvägen alltid den kortaste, så
,vilket strider mot den tidigare ojämlikheten. Så vårt antagande var fel. Lemmat är bevisat.
Låt oss kalla det kritiska för kanterna på förstärkningsbanan, vars restkapacitet är minimal. Låt oss uppskatta hur många gånger någon kant (u, v) kan vara kritisk. Låt det hända vid iteration , och nästa gång vid iteration . Betecknar avståndet från s till y vid iteration t, vi har:
Observera att vid iterationen försvinner den kritiska kanten från det kvarvarande nätverket. För att kanten (u, v) ska dyka upp i den igen vid tiden för iterationen, är det nödvändigt att vid någon mellanliggande iteration en förstärkningsbana som innehåller kanten (v, u) väljs. Följaktligen,
Med hjälp av det tidigare beprövade lemmat får vi:
Eftersom inledningsvis (annars v = s, men kanten som leder till s inte kan visas på den kortaste vägen från s till t), och alltid, när den naturligtvis är mindre än |V| (den kortaste vägen innehåller inte cykler och därför innehåller färre |V|-kanter), kan en kant vara kritisk vid de flesta tillfällen. Eftersom varje förstärkningsväg innehåller minst en kritisk kant och det totala antalet kanter som en dag kan bli kritiska (alla kanter på det ursprungliga nätverket och deras motsatta), så kan vi inte öka sökvägen mer än |E|·|V | en gång. Därför överstiger inte antalet iterationer O(|E|·|V|), vilket skulle bevisas.
Låt ett nätverk ges med source vid vertex och drain vid vertex . I figuren betecknar ett par flödet längs denna kant och dess genomströmning.
Låt oss beskriva bredden-första-sökningen i det första steget.
Observera att hörn som kan nås från A i exakt 1 steg, i exakt 2 steg och i exakt 3 steg lades till sekventiellt i kön. Dessutom är föräldern till varje vertex den hörn som kan nås från A exakt 1 steg snabbare.
Bankapacitet | Väg |
---|---|
|
|
|
|
|
|
|
|
Observera att under exekveringen av algoritmen minskar inte längden på komplementära vägar (indikerade i rött i figurerna). Denna egenskap är uppfylld på grund av att vi letar efter den kortaste kompletterande vägen .
En förbättrad version av Edmonds-Karp-algoritmen är Dinitz-algoritmen, som kräver operationer.
Låt oss kalla ett extra konturlöst nätverk av en graf för G med källan s dess subgraf som endast innehåller de kanter (u, v) för vilka det minsta avståndet från s till v är ett större än det minsta avståndet från s till u.
Dinits algoritm:
Algoritmer för grafsökning | ||
---|---|---|
Oinformerade metoder | ||
Informerade metoder | ||
Genvägar | ||
Minsta spännträd | ||
Övrig |