Algoritmul Dinitz este un algoritm polinom pentru găsirea debitului maxim într-o rețea de transport , propus în 1970 de matematicianul sovietic (mai târziu israelian) Efim Dinitz . Complexitatea temporală a algoritmului este . O astfel de estimare poate fi obținută prin introducerea conceptelor de rețea auxiliară și de flux de blocare (pseudo-maximal) . În rețelele cu lățimi de bandă unitare, există o estimare a complexității timpului mai puternică: .
Fie o rețea de transport , în care și sunt, respectiv, debitul și fluxul prin margine .
Lățimea de bandă reziduală este o mapare definită ca:Algoritmul lui Dinit
Intrare : Rețea . Ieșire : debit maxim .Se poate arăta că de fiecare dată numărul de muchii din calea cea mai scurtă de la sursă la chiuvetă crește cu cel puțin una, deci nu mai există fluxuri de blocare în algoritm, unde este numărul de vârfuri din rețea. Rețeaua auxiliară poate fi construită prin parcurgerea lățimii întâi în timp , iar fluxul de blocare la fiecare nivel al graficului poate fi găsit în timp . Prin urmare, timpul de rulare al algoritmului Dinits este .
Folosind structuri de date numite arbori dinamici , este posibil să găsiți fluxul de blocare pe fiecare fază în timp , apoi timpul de rulare al algoritmului lui Dinitz poate fi îmbunătățit la .
Mai jos este o simulare a algoritmului lui Dinitz. În rețeaua auxiliară, vârfurile cu etichete roșii sunt valorile . Firul de blocare este marcat cu albastru.
unu. | |||
---|---|---|---|
Un fir de blocare este format din căi:
Prin urmare, fluxul de blocare conține 14 unități, iar valoarea debitului este 14. Rețineți că calea complementară are 3 margini. | |||
2. | |||
Un fir de blocare este format din căi:
Prin urmare, fluxul de blocare conține 5 unități, iar valoarea fluxului este 14 + 5 = 19. Rețineți că calea complementară are 4 margini. | |||
3. | |||
Stocul nu este accesibil în rețea . Prin urmare, algoritmul oprește și returnează fluxul maxim de magnitudine 19. Rețineți că în fiecare flux de blocare, numărul de muchii din calea complementară este crescut cu cel puțin una. |
Algoritmul Dinitz a fost publicat în 1970 de fostul om de știință sovietic Efim Dinitz, care acum este membru al Facultății de Inginerie Calculatoare a Universității Ben-Gurion (Israel), mai devreme decât algoritmul Edmonds-Karp , care a fost publicat în 1972, dar creat mai devreme. Ei au arătat în mod independent că, în algoritmul Ford-Fulkerson , dacă calea complementară este cea mai scurtă, lungimea căii complementare nu scade.
Complexitatea de timp a algoritmului poate fi redusă prin optimizarea procesului de găsire a unui fir de blocare. Pentru a face acest lucru, este necesar să introduceți conceptul de potențial . Potențialul muchiei este , iar potențialul vârfului este . După aceeași logică , a . Ideea îmbunătățirii este de a căuta un vârf cu potențial pozitiv minim în rețeaua auxiliară și de a construi un flux de blocare prin el folosind cozi .
Intrare : Rețea . Ieșire : debit maxim .Algoritmii de propagare înainte și înapoi servesc pentru a găsi căi de la la și , respectiv, de la la. Un exemplu de algoritm de propagare directă folosind cozi:
Intrare : Rețea auxiliară , vârf astfel încât . Ieșire : un flux de la sursă la vârf care face parte dintr-un flux de blocare.Datorită faptului că cel puțin un vârf este „saturat” în fiecare iterație a căutării unui flux de blocare, acesta este finalizat în iterații din cel mai rău caz, fiecare dintre acestea având în vedere maximul de vârfuri. Fie numărul de margini „saturate” în fiecare -a iterație a căutării unui fir de blocare. Apoi complexitatea sa asimptotică este , unde este numărul de vârfuri și numărul de muchii din grafic. Astfel, complexitatea asimptotică a algoritmului de răspândire al lui Dinitz este egală cu , deoarece fluxul de blocare poate trece cel mult prin vârfuri.