Algoritmul Edmonds-Karp rezolvă problema găsirii debitului maxim într-o rețea de transport . Algoritmul este un caz special al metodei Ford-Fulkerson și rulează în timp în grafic . A fost publicat pentru prima dată în 1970 de omul de știință sovietic E. A. Dinitz . Mai târziu, în 1972, a fost descoperit independent de Edmonds și Karp .
Algoritmul Edmonds-Karp este o variantă a algoritmului Ford-Fulkerson în care cea mai scurtă cale complementară de la până la în rețeaua reziduală este aleasă la fiecare pas (presupunând că fiecare muchie are lungimea unitară). Cea mai scurtă cale este găsită prin căutarea pe lățimea întâi .
Pentru a găsi calea cea mai scurtă într-un grafic, folosim căutarea pe lățimea întâi :
În timpul lucrului, algoritmul Edmonds-Karp va găsi fiecare cale complementară în timp . Mai jos vom demonstra că numărul total de creșteri de debit efectuate de acest algoritm este . Astfel, complexitatea algoritmului Edmonds-Karp este .
Să numim distanța de la vârful x la vârful y lungimea celei mai scurte căi de la x la y din rețeaua reziduală, măsurată prin numărul de muchii. Dacă nu există o astfel de cale, vom considera că distanța este infinită. Vom spune că y s-a apropiat de x (a îndepărtat de x ) dacă distanța de la x la y a scăzut (a crescut). Vom spune că y este mai aproape de x (mai departe de x ) decât z dacă distanța de la x la y este mai mică (mai mare) decât distanța de la x la z .
Lema . Pe parcursul algoritmului, niciun vârf nu se apropie de sursă. Dovada . Să nu fie așa, atunci cu o oarecare creștere a debitului, unele vârfuri s-au apropiat de sursă. Să le numim greșit. Alegem unul dintre vârfurile greșite, care, după creșterea fluxului, s-a dovedit a fi cel mai aproape de sursă (dacă există mai multe dintre ele, atunci oricare dintre ele). Notați vârful selectat cu v . Luați în considerare calea cea mai scurtă de la s la v . Notați penultimul vârf de pe această cale cu u , astfel încât calea să arate ca . Deoarece u este mai aproape de s decât v și v este cel mai apropiat vârf ilegal de s , atunci u este un vârf obișnuit. Notând distanțele de la s la u și v înainte și după creșterea debitului, respectiv , ca , , , , avem:
,Unde
Prin urmare, înainte de creșterea debitului, arcul ( u , v ) era absent din rețeaua reziduală. Pentru ca acesta să apară, calea de creștere trebuia să conțină un arc ( v , u ). Dar în algoritmul Edmonds-Karp, calea de creștere este întotdeauna cea mai scurtă, deci
,care contrazice inegalitatea anterioară. Deci presupunerea noastră a fost greșită. Lema este dovedită.
Să o numim critică pe cea a marginilor căii de creștere, a cărei capacitate reziduală este minimă. Să estimăm de câte ori o muchie (u, v) poate fi critică. Lăsați să se întâmple la iterare și data viitoare la iterare . Notând distanța de la s la y la iterația t, avem:
Rețineți că la iterație marginea critică dispare din rețeaua reziduală. Pentru ca muchia (u, v) să reapară în ea până în momentul iterației, este necesar ca la o iterație intermediară să fie aleasă o cale de creștere care să conțină muchia (v, u). Prin urmare,
Folosind lema demonstrată anterior, obținem:
Deoarece inițial (altfel v = s, dar muchia care duce la s nu poate apărea pe calea cea mai scurtă de la s la t), și întotdeauna, când desigur, este mai mică decât |V| (cea mai scurtă cale nu conține cicluri și, prin urmare, conține mai puține muchii |V|), o muchie poate fi critică de cele mai multe ori. Deoarece fiecare cale de creștere conține cel puțin o margine critică și numărul total de muchii care ar putea deveni într-o zi critice (toate marginile rețelei originale și cele opuse ale acestora), atunci putem crește calea nu mai mult de |E|·|V | o singura data. Prin urmare, numărul de iterații nu depășește O(|E|·|V|), ceea ce urma să fie demonstrat.
Fie dată o rețea cu sursă la vârf și dren la vârf . În figură, o pereche indică fluxul de-a lungul acestei margini și debitul acesteia.
Să descriem căutarea pe lățimea întâi la primul pas.
Rețineți că vârfurile accesibile de la A în exact 1 pas, exact 2 pași și exact 3 pași au fost adăugate secvenţial la coadă. În plus, părintele fiecărui vârf este vârful accesibil de la A exact cu 1 pas mai repede.
Capacitatea traseului | cale |
---|---|
|
|
|
|
|
|
|
|
Rețineți că în timpul execuției algoritmului, lungimile căilor complementare (indicate cu roșu în figuri) nu scad. Aceasta proprietate este indeplinita datorita faptului ca cautam cea mai scurta cale complementara .
O versiune îmbunătățită a algoritmului Edmonds-Karp este algoritmul Dinitz, care necesită operații.
Să numim o rețea auxiliară fără contur a unui grafic G cu sursa s subgraful său care conține doar acele muchii (u, v) pentru care distanța minimă de la s la v este cu o mai mare decât distanța minimă de la s la u.
Algoritmul lui Dinit:
Algoritmi de căutare grafică | ||
---|---|---|
Metode neinformate | ||
Metode informate | ||
Comenzi rapide | ||
Arborele de întindere minim | ||
Alte |