Table of Contents
Algoritmul Edmonds-Karp: o analiză detaliată a eficienței
Algoritmul Edmonds-Karp este o implementare specifică a metodei Ford-Fulkerson pentru calcularea fluxului maxim într-o rețea de flux. În timp ce metoda originală Ford-Fulkerson utilizează o căutare arbitrară pentru trasee de mărire (care poate duce la timp exponențial în cazuri patologice), Edmonds-Karp aplică o căutare bazată pe BFS, asigurându-se că cea mai scurtă cale de mărire (în ceea ce privește numărul de margini) este aleasă fiecare iterație. Această garanție produce un termen polinomial bine definit și face din algoritm o piatră de temelie a teoriei fluxului rețelei introductive.
Descrierea algelitmica si proprietati cheie
Având în vedere un grafic direct G = (V, E) cu o sursă [s, s-a scufundat t și funcția de capacitate c: E → R+, algoritmul Edmonds-Karp are următoarele caracteristici:
- Se calculează valoarea tuturor valorilor medii ale emisiilor de CO2 ale emisiilor de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 provenite de la emisiile de CO2 generate de emisiile de CO2 generate de emisiile de CO2 provenite de la emisiile de CO2 generate de emisiile de CO2 generate de CO2 generate de CO2 generate de emisiile de CO2 generate de emisiile de CO2 provenite de la emisiile de CO2 provenite de la emisiile de CO2 provenite de CO2 generate de CO2 provenite de la emisiile de CO2 generate de CO2 provenite de la emisiile de CO2 generate de CO2 provenite de la emisiile de CO2 generate de CO2 provenite din emisiile de CO2 provenite din emisiile de CO2 provenite din emisiile de la emisiile de CO2 provenite din emisiile de la emisiile de CO2 provenite din emisiile de CO2 provenite
- Construcționați graficul rezidual Gf[inclusiv marginile înapoiate cu capacitate egală cu fluxul de curent].
- Rulează BFS pe Gf[ din s pentru a găsi cea mai scurtă cale dirijată către t (măsurată în număr de margini).
- Dacă nu există nicio cale, se termină; fluxul de curent este maxim.
- În caz contrar, se determină capacitatea de închidere a blocului de-a lungul traseului (capacitate reziduală minimă).
- Fluxul de creștere cu această sumă de-a lungul traseului și actualizarea capacităților reziduale.
- Repetaţi din pasul 2.
Utilizarea BFS asigură că fiecare cale de creştere găsită este o cale mai scurtă în graficul rezidual. Apare o proprietate critică: distanţa (în margini) de la s la ]t în graficul rezidual nu scade niciodată şi creşte strict fiecare O(E) iterații. Aceasta duce direct la complexitatea legată.
Analiza complexității
Timpul de rulare al fiecărui BFS este O(V + E)[, care simplifică [O(E)[] pentru graficele rare tipice.Provocarea de bază limitează numărul de augmentare.Pentru că fiecare mărire saturează cel puțin o margine (flacăra de sticlă), și fiecare margine poate fi saturată cel puțin V/2 ori (din moment ce fiecare saturare crește distanța de S până la t de cel puțin unul, numărul total de căi de trasee de agmentare este O(VE.Multiplicarea prin costul BFS oferă cea mai mare complexitate a [O
Mai precis, analiza standard arată că numărul de augmentare este cel mult O(VE][, astfel încât timpul total este []O(V E2)] [sau O(V E * (V+E)]] pentru integralitate.Pentru graficele dense unde E =
Comparație cu alte algemi Max Flow
Dinic
Dinic algoritmul folosește, de asemenea, BFS pentru a construi un grafic de nivel, dar apoi permite mai multe căi de mărire într-o singură fază prin intermediul DFS pe graficul de nivel. Aceasta reduce numărul de BFS rulează la cel mult V (de la nivelul chiuvetei crește fiecare fază). Complexitatea generală este O(V2 E) în general și O(E
Algoritmile de marcare a împingerii
Metodele de tip "sping-retake," cum ar fi algoritmul generic sau varianta de cel mai înalt nivel, realizează limite O(V2
O altă variantă importantă este calificarea capacității[, care adaugă un parametru de scalare la metoda Ford-Fulkerson, producând O(E2 log U) unde U] este capacitatea maximă. Aceasta este, de asemenea, polinomică, dar mai simplă decât eticheta de împingere.
De ce Edmonds-Karp încă contează
În ciuda faptului că este mai lent decât Dinic și eticheta de împingere, Edmonds-Karp este pedagogic de valoare. Simplitatea sa și dovada intuitivă a alergării polinomiale (pe baza monotonicității căii scurte) fac din aceasta un instrument de predare excelent. Multe programe de informatică introduc Edmonds-Karp înainte de a trece la metode mai avansate. În plus, pentru rețelele mici până la medii (spune, până la câteva mii de vertice și margini), diferența de performanță practică poate fi neglijabilă, în special dacă graficul este slab și are capacități de margine reduse.
Implicaţii practice şi cazuri de utilizare
În aplicațiile din lumea reală, selecția algoritmilor depinde în mare măsură de constrângerile legate de probleme.
- Asortarea bipartit: Edmonds-Karp reduce la algoritmul Hopcroft .Karp atunci când capacitățile sunt unite și rețeaua este bipartită? De fapt, nici un . Hopcroft .Karp este un algoritm dedicat cu O (E .V)] timpul; totuși, Edmonds-Karp pe grafice bipartite de capacitate unitară se execută în O(V E) ? În rețelele de capacitate unitară, fiecare BFS găsește o cale de mărire care saturează o margine, și numărul de augmentare de capacitate unitară devine astfel limitat de valoarea fluxului maxim F.F pentru dimensiunile moderate.
- Ingineria traficului : În rețelele de telecomunicații și de drumuri, fluxurile sunt adesea mari și graficele sunt rare. Dinic sau de tip împingere-remarcare sunt preferate datorită unei mai bune scalari.
- Segmentarea imaginii: Algoritmii de tăiere grafică pentru vizualizarea pe calculator se bazează adesea pe calcule cu debit maxim/min-cut. Algoritmul Boykov-Kolmogorov, o metodă de augmentare specializată, adesea depăşeşte algoritmii generici pentru aceste grafice asemănătoare grilei, dar Edmonds-Karp poate fi folosit pentru probleme mai mici.
- Educația și prototipul : Când simplitatea și corectitudinea sunt esențiale pentru viteza brută, Edmonds-Karp este o alegere sigură. Comportamentul său este previzibil, și depanarea este simplă, deoarece BFS este ușor de implementat.
Performanță empirică
Valorile de referință ale graficelor aleatorii arată că Edmonds-Karp rulează adesea în timp aproape liniar în practică atunci când capacitățile de margine sunt mici [[]O(1)]]) deoarece numărul de augmentare este limitat de valoarea fluxului maxim, care poate fi mic. Cu toate acestea, pentru rețelele de mare capacitate, algoritmul se poate degrada. De exemplu, ia în considerare o rețea în care capacitățile sunt numere întregi mari; valoarea fluxului ar putea fi uriașă, ceea ce duce la numeroase augmentare. În astfel de cazuri, metodele Dinic sau scalare sunt mai robuste.
Considerații privind punerea în aplicare
La implementarea Edmonds-Karp, gestionarea atentă a graficului rezidual este esențială. Reprezentarea atât a marginilor înainte cât și înapoi permite o augmentare ușoară și o cale de întoarcere. Folosind o listă de adajanță cu pointeri pentru a inversa marginile (sau stocarea indicilor de margine inversă) simplifică actualizările. BFS trebuie să înregistreze, de asemenea, predecesorii pentru a reconstrui calea de augmentare. Utilizarea memoriei este O(V + E), similar cu alți algoritmi.
Optimizările includ:
- Denunțarea anticipată dacă BFS nu poate ajunge t.
- Utilizarea capacităților și fluxurilor întregi pentru a evita problemele de punct plutitor.
- Agregarea mai multor augmentare dacă graficul are multe margini paralele (deși mai puțin frecvente).
Pentru rețelele foarte mari, ia în considerare utilizarea unui BFS dinamic care actualizează distanțele treptat, dar acest lucru adaugă adesea complexitate fără câștiguri semnificative pentru Edmonds-Karp în mod specific.
Relația cu metoda originală Ford-Fulkerson
Jack Edmonds și Richard Karp au publicat algoritmul lor în 1972, demonstrând că utilizarea BFS produce un algoritm de flux maxim polinomial timp. Înainte de asta, metoda Ford-Fulkerson (1956) nu a specificat regula de selecție a traseului, și a fost cunoscut că alegerile slabe ar putea duce la timp exponențial. Edmonds și Karp . Lucrarea Karp . A fost un pas fundamental în dezvoltarea algoritmilor puternic polinomi pentru fluxurile de rețea. Lucrarea "Îmbunătățiri teoretice în eficiența algoritică pentru probleme de flux de rețea"] rămâne o referință clasică.
Extensii și variații
Variantele lui Edmonds-Karp includ:
- Versiunea de scalare a capacității: În loc să crească întotdeauna pe cea mai scurtă cale, algoritmul funcționează cu un parametru de scalare
- Capacitatea de optimizare a unității: Atunci când toate capacitățile sunt 1, algoritmul de mărire a traiectoriei bazat pe BFS este specializat în algoritmul Hopcroft
- Integralitate: Algoritmul menține în mod natural fluxurile integrale atunci când capacitățile sunt integrale, ceea ce îl face potrivit pentru problemele combinatoriale.
Concluzie
Algoritmul Edmonds-Karp este o metodă fiabilă și bine înțeleasă pentru rezolvarea problemelor de flux maxim. O(V E2) Complexitatea timpului în cel mai rău caz face imposibilă pentru rețelele foarte mari sau dense, dar simplitatea și dovada clară a timpului de funcționare polinomial și-au cimentat locul în manualele de algoritm. Pentru sistemele din lumea reală care necesită performanță ridicată, algoritmul Dinic . Sau metodele de tip push-remarcation sunt în general preferate. Cu toate acestea, pentru setările educaționale, problemele de scară mică, sau ca un element de referință pentru verificarea corectitudinii, Edmonds-Karp rămâne un instrument valoros.
Citirea ulterioară a algoritmilor de flux avansat se poate găsi în Articlele Wikipedia și în manualul clasic Introducerea în Algorithms (CLRS). Pentru o analiză mai aprofundată a performanței algoritmului de flux, a se vedea Note de implementare a fluxuluiNetworkX.