Dinicov algoritam je strogo polinomijalni algoritam za izračunavanje maksimalnog protoka kroz transportnu mrežu osmišljen 1970. godine od strane izraelskog (prethodno sovjetskog) izučivača kompjutera Jefim Dinitz[1][1] algoritam se izvršava u vremenskom periodu O(V2E) i sličan je Emond-Karp Algoritmu koji se izvršava u vremenu O(VE2) u tome da koristi najkraće promenjene putanje. Uvod koncepta o grafa sa nivoima i blokiranja toka omogućuju Dinicovom algoritmu da postigne svoje izvođenje.

Istorija

uredi

Dinitc algoritam je 1970. godine objavio bivši ruski izučivač kompjutera Jefim A. Dinitc, koji je danas član Odseka za nauku računarstva na Ben-Gurion Univerzitetu Negav (Izrael), pre Edmonds-karp algoritma koji je objavljen 1972. godine ali je ranije otkriven. Nezavisno su pokazali da u Ford-fulkerson algoritmu[2][2] ako je svaka promenjljiva putanja najkraća, onda dužina promenljivih putanja ne opada.

Definicija

uredi

Neka je   mreža sa   i   težina i protok grana   (u tom redosledu).

Preostala težina je Slikanje   definisano kao
1. ako  
 
 
2. inače  
Preostali graf   gde:
  Promenjljiva putanja je   putanja u preostalom grafu  .
definišemo dist(v) da bude dužina nakraće putanje od s do v u grafu  . Onda graf sa nivoima   je graf   gde:
 
Blokirajući tok je   tok   takav da graf   sa   ne sadrži   putanju

Algoritam

uredi

Dinicov algoritam

Ulaz graf  
Izlaz:   tok   maksimalne vrednosti
  1. inicijalizujemo   za svako  
  2. Konstruišemo   uz pomoć   od  . Ako je   stani i stavi   na izlaz.
  3. Nađemo blokirajući tok   u  
  4. Uskladimo   uspomoć   i vratimo se na drugi korak

Analiza algoritma

uredi

Može biti pokazano da se broj grana u svakom blokirajućem toku povećava za barem 1 svaki put tako da ima najviše   blokirajućih tokova u algoritmu, gde je   broj čvorova u grafu. Graf sa nivoima   može biti konstruisan pretragom u širinu u   vremenu a blokirajući tok u svakom nivou grafa se može pronaći u   vremenu. Dakle Vreme izvršavanja ovog algoritma je  .

Koristeći strukturu podataka zvanu dinamičko drve vreme potrebno za nalaženje blokirajućeg toka se može smanjiti na  , pa se vreme izvršavanja ovog algoritma može poboljšati na  .

Specijalni slučajevi

uredi

U grafu sa jediničnim težinama, postoji mnogo jača vremenska granica. Svaki blokirajući tok se može naći za   i može se pokazati da broj faza ne prelazi   i  . Tako da se algoritam izvršava u   vremenu[3].

U grafovima nastalim tokom rešavanja problema bipartitivnog uparivanja broj faza je ograničen sa  , odtle vodeći vremensku granicu  . Rezultujući algoritam je poznat kao Hopcrtft-Karp algoritam. Generalnije ova granica drži bilo koji graf -- graf u kojem svaki čvor osim izvora i ponora ima ili jednu ulaznu granu težine jedan ili jednu izlaznu granu težine jedan, a sve ostale težine su proizvoljni celi brojevi.[4]

Primer

uredi

Sledeće je simulacija dinitc algoritma. U gafu sa nivoima   čvorovi u crvenoj boji su vrednosti  . Putanje plave boje su blokirajući tok.

     
1.
 
 
 

Blokirajući tok se sastoji od

  1.   sa 4 jedinice toka
  2.   sa 6 jedinice toka
  3.   ca 4 jedinice toka

Dakle blokirajući tok je sastavljen od 14 jedinica toka , i vrednost toka   je 14. primetiti da svaka promenjljiva putanja u blokirajućem toku ima 3 grane.

2.
 
 
 

Blokirajući tok se sastoji od

  1.   sa 5 jedinica toka.

Dakle blokirajući tok se sastoji od 5 jedinica i vrednost toka   je 14+5=19. Primetiti da svaka promenjljiva putanja ima 4 grane.

3.
 
 
 

Pošto   ne može da se dostigne u   algorotam završava sa radom i vraćatok sa maksimalnom vrednošću 19. Primetiti da u svakom blokirajućem toku broj grana u promenjljivim putanjama se povećava za barem 1.

Vidi još

uredi

Reference

uredi
  1. ^ [[Jefim Dinitz|Yefim Dinitz (1970). „Algorithm for solution of a problem of maximum flow in a network with power estimation” (PDF). Doklady Akademii nauk SSSR. 11: 1277–1280. Arhivirano iz originala (PDF) 22. 08. 2016. g. Pristupljeno 10. 04. 2017. ]]
  2. ^ Ilan Kadar; Sivan Albagli (2009-11-27). [http://www.powershow.com/view/c6619-OThkZ/Dinitzs_algorithm_for_finding_a_maximum_flow_in_a_network_powerpoint_ppt_presentation „Dinitz's algorithm for finding a maximum flow in a network”]. 
  3. ^ Even, Shimon; Tarjan, R. Endre (1975). „Network Flow and Testing Graph Connectivity”. SIAM Journal on Computing. 4 (4): 507—518. ISSN 0097-5397. doi:10.1137/0204043. 
  4. ^ Tarjan 1983. p. 102.