Edmonds-Karp Algoritmen: En detaljerad effektivitetsanalys
Edmonds-Karp algoritmen är ett specifikt genomförande av Ford-Fulkerson-metoden för att beräkna det maximala flödet i ett flödesnätverk. Medan den ursprungliga Ford-Fulkerson-metoden använder en godtycklig sökning efter förstärkningsvägar (som kan leda till exponentiell tid i patologiska fall), Edmonds-Karp genomdriver en BFS-baserad sökning, vilket säkerställer att den kortaste förstärkningsvägen (i termer av kanter) väljs varje iteration.
Algoritmisk beskrivning och nyckelegenskaper
Med tanke på en riktad graf ]G = (V, E) ] med en källa ]s]]], sjunker ] och kapacitetsfunktion ]]]]]] c: E → R+], Edmonds-Karp algoritmen fortsätter enligt följande:
- Initialisera flöde f(e) = 0 ]] för alla kanter.
- ][[]][[[]][[]]]]] (inklusive bakåtkanter med kapacitet som motsvarar det aktuella flödet).
- ][[[]][][]]]]]]]]]]]]]]]]]]]]][]]] (mätt i antal kanter).
- Om ingen väg existerar, avsluta; det nuvarande flödet är maximalt.
- Annars bestämmer flaskhalsen kapacitet längs vägen (minsta restkapacitet).
- Öka flödet med det beloppet längs vägen och uppdatera restkapacitet.
- Upprepa från steg 2.
Användningen av BFS säkerställer att varje förstärkningsväg som finns är en kortaste väg i den kvarvarande grafen. En kritisk egenskap uppstår: avståndet (i kanter) från ]s till ]]]] i resten av grafen minskar aldrig och strikt ökar varje ]] iterationer. Detta är direkt till komplexiteten.
Komplexitetsanalys
[LT:0] [[[[[F]]]]]], som förenklar []]]] för typiska glesa grafer.Kärnutmaningen är bunden av antalet förstärkningar.] [[FLT]]] [[[[[f]]]]]]]] mättar minst en fördel (flasknäppen), och varje kan mättas högst ]]
Mer exakt visar standardanalysen att antalet förstärkningar är högst O(VE)], så den totala tiden är O(V E2)] (eller ]O(V E * (V+E))]]] för fullständighet). För täta grafer där ]]E=(V2) blir detta [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
Jämförelse med andra Max Flow Algoritmer
Dinics Algoritm
Dinics algoritm använder också BFS för att bygga en nivå graf, men sedan tillåter flera förstärkningsvägar i en enda fas via DFS på nivå graf. Detta minskar antalet BFS körs till högst ]V (eftersom nivån på diskbänken ökar varje fas). Den totala komplexiteten är ] O(V2 E) i allmänhet och O(E √V)[F
Push-Relabel Algoritmer
Push-relabel metoder, såsom den generiska algoritmen eller den högsta märkningsvarianten, uppnå ]O(V2 √E) ]]] eller ]]]O(V3)]]] gränser. De arbetar genom att trycka flöde lokalt längs berättigade kanter och relabel vertiker för att upprätthålla en giltig märkning. Dessa algoritmer är mer komplexa för att genomföra men ofta köra snabbare i praktiken, särskilt för stora, täta grafer.
En annan viktig variant är kapacitetskalning ]] algoritmen, som lägger till en skalparameter till Ford-Fulkerson-metoden, som ger ]O(E2 log U)] där ]]]]]]]] är den maximala kapaciteten. Detta är också polynomial men enklare än push-relabel.
Varför Edmonds-Karp fortfarande är viktigare
Trots att det är långsammare än Dinic och push-relabel, är Edmonds-Karp pedagogiskt värdefull. Dess enkelhet och det intuitiva beviset på polynom runtime (baserat på kortaste väg monotonicity) gör det till ett utmärkt undervisningsverktyg. Många datorvetenskapliga läroplaner introducerar Edmonds-Karp innan de flyttar till mer avancerade metoder. Dessutom, för små till medelstora nätverk (säg, upp till några tusen vertiker och kanter), kan den praktiska prestandan vara försumbar, särskilt om grafen är spargerad och har kapacitet.
Praktiska konsekvenser och användningsfall
I verkliga applikationer beror algoritmvalet starkt på problembegränsningar.
- ]Bipartite matchning : Edmonds-Karp reducerar till Hopcroft-Karp algoritmen när kapaciteten är enhet och nätverket är bipartit? Egentligen nej - Hopcroft-Karp är en dedikerad algoritm med [[E √V]]]]]] tid; dock, Edmonds-Karp på bipartit grafer som körs i [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]][[[[[[[[[[[[[[
- ]Traffic engineering ]: I telekommunikation och vägnät är flöden ofta stora och grafer glesa. Dinic eller push-relabel är att föredra på grund av bättre skalning.
- ] Bildsegmentering: Grafslipade algoritmer för datorseende är ofta beroende av max-flow/min-cut computations. Boykov-Kolmogorov algoritmen, en specialiserad förstärkningsvägsmetod, ofta överträffar generiska algoritmer för dessa rutnät-liknande grafer, men Edmonds-Karp kan användas för mindre problem.
- Utbildning och prototyper: När enkelhet och korrekthet är avgörande över rå hastighet, är Edmonds-Karp ett säkert val. Dess beteende är förutsägbart, och felsökning är enkelt eftersom BFS är lätt att genomföra.
Empirisk prestanda
Benchmarks på slumpmässiga grafer visar att Edmonds-Karp ofta går i nära linjär tid i praktiken när kanten kapacitet är liten (]]O(1)]) eftersom antalet förbättringar är bundna av maxflödesvärdet, vilket kan vara litet. Men för hög kapacitet nätverk, algoritmen kan försämras. Till exempel, överväga ett nätverk där kapaciteten är stora heltal; flödesvärdet kan vara stort, vilket leder till många förbättringar.
Implementeringsövervägningar
När du genomför Edmonds-Karp är noggrann rest grafhantering avgörande. Representerar både framåt och bakåt kanter tillåter enkel förstärkning och backtracking. Använda en intilliggande lista med pekar för att vända kanter (eller lagra omvända kant index) förenklar uppdateringar. BFS måste också spela in föregångare för att rekonstruera den förstärkande vägen. Memory användning är O (V + E)mgorith algorith algorith).
Optimering inkluderar:
- Tidig uppsägning om BFS inte kan nå ]t[].
- Använda integerkapacitet och flöden för att undvika flytande punkt problem.
- Aggregera flera förstärkningar om grafen har många parallella kanter (även mindre vanligt).
För mycket stora nätverk, överväga att använda en dynamisk BFS som uppdaterar avstånd stegvis, men detta lägger ofta till komplexitet utan betydande vinster för Edmonds-Karp specifikt.
Förhållande till den ursprungliga Ford-Fulkerson Method
Jack Edmonds och Richard Karp publicerade sin algoritm 1972, vilket visar att användningen av BFS ger en polynom-tid maximal flödesalgoritm. Före det, Ford-Fulkerson-metoden (1956) inte specificerade vägen urvalsregeln, och det var känt att dåliga val kunde leda till exponentiell tid. Edmonds och Karps arbete var ett grundläggande steg i utvecklingen av starkt polynomial algoritmer för nätverksflöden.
Förlängningar och variationer
Varianter av Edmonds-Karp inkluderar:
- ]Capacity-skalningsversion[]: Istället för att alltid öka längs den kortaste vägen fungerar algoritmen med en skalparameter Δ]] och endast anser kanter med restkapacitet ≥ Δ. Detta ger en ]O(E2 log U)] algoritm.
- ]En kapacitetsoptimering[]: När alla kapaciteter är 1, är BFS-baserade augmenting path algoritmen specialiserar sig på Hopcroft-Karp algoritmen, även om den senare använder försiktigt växlande BFS / DFS för att uppnå ]]O(E √V)]].
- ]Integralitet: Algoritmen upprätthåller naturligt integrerade flöden när kapaciteten är integrerad, vilket gör den lämplig för kombinatoriska problem.
Slutsats
Edmonds-Karp algoritmen är en pålitlig och väl förstådd metod för att lösa maximala flödesproblem. Dess ]]O(V E2) ] värsta fall tid komplexitet gör det opraktiskt för mycket stora eller täta nätverk, men dess enkelhet och tydliga bevis på polynom runtime har cementerat sin plats i algoritm läroböcker. För verkliga system som kräver hög prestanda, Dinic's algoritm eller push-relabel metoder är dock i allmänhet små.
Ytterligare läsning på avancerade flödesalgoritmer finns i Wikipedia-artikeln ] och i den klassiska läroboken ]Introduktion till algoritmer (CLRS). För en djupare analys av flödesalgoritmprestanda, se ]NetworkX-flödesgenomförande anteckningar]]].