Proiecre lgorimilor Cur 0 Rețele de flux. Flux mxim. Biliogrfie [] C. Giumle Inroducere in nliz lgorimilor - cp. 5.6 [2] Cormen Inroducere in lgorimi - cp. 27 [3] Wikipedi - hp://en.wikipedi.org/wiki/ford- Fulkeron_lgorihm [4] www.ric.dk/~kyum/dsoegop/pulic_h ml/ek.pdf
Oiecive Definire concepului de rețe de flux (u de rnpor). Idenificre principlilor p lgorimi ce clculeză fluxul mxim prinr-o rețe. Definire prolemei Rețe ce rnporă diferie merile inre un producăor i o deinție. Fiecre rc re o cpcie mximă de rnpor. Treuie idenific fluxul mxim ce poe fi rnpor prin rețe. Rețele: Elecrice; pă; Informții; Drumuri. 2
Rețe de flux Definiție G(V,E) orien; c(u,v) 0 (u,v) c = cpcie muchiei; Dcă (u,v) E c(u,v)=0; S ur rficului; T deinți rficului (dren); Pp. u V \ {, }..u... Exemplu de rețe de flux 8 4 2 3 2 c 5 d 9 ur, deinți. Pe rce ee reprezenă cpcie rcului. 3
Flux. Definiție. Proprieăți. G = (V,E) rețe de flux; c: VxV R V R - cpcie rețelei; f: V x V R - fluxul prin rețeu G; Proprieăți: u, v V f(u,v) c(u,v) (fluxul prinr-un rc ee mi mic u egl cu cpcie muchiei) i) repecre cpciății rcelor; u, v V f(u,v) = -f(v,u) imeri fluxului; Σf(u,v) = 0 penru u V \ {,} conervre fluxului. Exemplu de fluxuri /8 /2 2/2 4/4 3/3 c 3/5 d 3/9 i2+i3-i4-i=0 (P3) Σf(u,v) = 0 penru u V \ {,} fluxul e conervă; Propriee 3 = lege curenului (Kirchoff) - um I. curenților ce inră inr-un nod = um I. curenților ce ie din nodul repeciv. 4
Flux. Noții. f(u,v) fluxul din u pre v; f i (u) = Σf(v,u) fluxul ol cre inr in nodul u; f o (u) = Σf(u,v) fluxul ol cre iee din nodul u; Vlore olă fluxului: f = Σf(,v) = f o (); f = fluxul ce părăeșe ur; Cf. proprieăților P-P3: f = Σf(,v) = Σf(v,) = f i (). Sure muliple, deinții muliple Sure muliple {, 2,, n }; Deinții muliple {, 2,, m }; 2 2 Se dugă o ură unică cu rce de 3.. cpcie infiniă pre urele.. n.. i flux egl cu fluxul gener de urele repecive; n m Se dugă o deinție unică i rce de cpcie infini inre.. m i i flux egl cu fluxul ce inră in deințiile repecive. 5
Operții cu fluxuri X,Y mulimi de noduri; f(x,y) = Σ x X Σ y Y f(x,y) = fluxul inre X i Y; Operții: X V f(x,x) = 0; X,Y V f(x,y) = -f(y,x); X,Y,Z V i Y X f(x \ Y, Z) = f(x,z) -f(y,z); f(z, X \ Y) = f(z,x) - f(z,y); X,Y,Z V i X Y= f(x Y, Z) = f(x,z) + f(y,z); f(z, X Y) = f(z,x) + f(z,y) f(,v) = f(v,) Exemplu operții fluxuri () /8 X /2 2/2 4/4 3/3 c d 3/5 3/9 Y f(x,y) = Σ x X Σ y Y f(x,y) f(x,x) = f(,) + f(,) + f(,) + f(,) + f(,) + f(,) = 0 f(x,y) = f(,c) + f(,) = -f(c,) - f(,) = -f(y,x) 6
Exemplu operții fluxuri (2) /8 X /2 4/4 3/3 Y 2/2 c 3/5 d 3/9 Z X, Y, Z V i Y X f(x \ Y, Z) =f(x, Z) -f(y, Z) f(z, X \ Y)=f(Z,X)-f(Z,Y) f(x \ Y,Z)=0 = f(,) + f(c,d) - f(,) - f(c,d) = f(x,z) - f(y,z) f(z, X \ Y) =0 = f(,) + f(d,c) - f(,) - f(d,c) = f(z,x) - f(z,y) Exemplu operții fluxuri (3) /8 X /2 Z 2/2 4/4 3/3 c d 3/5 3/9 Y X, Y, Z V i X Y= f(x Y,, Z) = f(x,z) + f(y,z) f(z, X Y) = f(z,x) + f(z,y) f(x Y, Z) = f(,) + f(,) + f(,) + f(d,c) = f(x,z) + f(y,z) f(z, X Y) = f(,) + f(,) + f(,) + f(c,d) = f(z,x) + f(z,y) 7
Exemplu operții fluxuri (4) /8 /2 2/2 4/4 3/3 c 3/5 d 3/9 f(, V) = f(v, ) f(, V) = f(,) + f(,) = 5 = f(d,) + f(,) = f(v, ) rc rezidul. Cpcie rezidulă. Definiție: Un rc (u,v) penru cre f(u,v) < c(u,v) e numeșe ș rc rezidul. Fluxul pe ce rc e poe mări. Definiție: Cnie cu cre e poe mări fluxul pe rcul (u,v) e numeșe cpcie rezidulă rcului (u,v) (c f (u,v)). c f (u,v) = c(u,v) - f(u,v). 8
Rețe rezidulă. Cle rezidulă. G = (V,E) rețe de flux cu funcți de cpcie c. Definiție: iți Rețeu ț rezidulă ( = (V,E f )) ee o rețe ț de flux formă din rcele ce dmi creșere fluxului: E f = {(u,v) VxV c f (u,v) > 0}. Oervție: E f E!!! Definiție: ț Cle rezidulă (drum de meliorre) e un drum.. f, unde c f (u,v) ee cpcie rezidulă rcului (u,v). Definiție: Cpcie rezidulă căii = cpcie rezidulă minimă de pe cle.. decoperiă. Exemplu rețe rezidulă 2/8 /6 /2 4/4 3/3 c 4/2 d 2/2 4/9 2 6 4 5 c 3 d 8 5 2 4 2 2 4 Rețeu rezidulă =(V,E f ) unde E f = {(u,v) V x V c(u f (u,v) > 0} 6 4 3 5 c 8 d 5 4 Cle rezidulă: c d Cpcie rezidulă căii: c f (p) = min{6, 5, 8, 5} = 5 4 9
Rețe rezidulă Lemă 5.6: Fie G = (V,E) rețe de flux, f fluxul in G, rețeu ț rezidulă lui G. Fie f un flux prin i f+f o funcție definiă fel: f+f (u,v) = f(u,v) + f (u,v). unci f+f reprezină un flux in G i f+f = f + f ceă Lemă ne pune cum puem mări fluxul prinr-o rețe de flux. Flux in reeu rezidul Lemă 5.7: G rețe de flux, f flux in G, p =.. cle rezidulă in, f p :V x V->R e defineșe c fiind: f p (u,v) = c f (p), dcă (u,v) p -c f (p), dcă (v,u) p 0, dcă (u,v) i (v,u) p f p = flux in ; f p = c f (p) Corolr 5.4: f = f + f p = flux in G, fel inc f = f + f p > f ceă Lemă ne pune cum e defineșe fluxul prinr-o rețe rezidulă. 0
Exemplu mximizre flux 2/8 /2 2/2 2 6 2 4/4 3/3 4 /6 3 5 c 4/2 d 4/9 5 c d 8 4 f(..) = 2 + 4 = 6 f p (..) = 5 /2 7/8 2/2 4/4 3/3 6/6 9/9 c d 9/2 4 f = f + f p = 6 + 5 = Clculul fluxului mxim Meod Ford-Fulkeron f(u,v) = 0 u,v Repeă // creșere ierivă fluxului găeșe un drum..p.. pe cre e poe mări fluxul (cle rezidulă) f = f + flux(..p..) Până când nu e mi poe găi nici un drum..p.. Înorce f In funcție de meodele de idenificre căii exiă mi mulți lgorimi ce urmeză ceă meodă.
Tăieuri in rețele de flux Definiție: O ăieură (S,T) unei rețele de flux G = priționre nodurilor in 2 mulțimi dijunce S i T = V \ S.i. S i T. f(s,t) = Σ x S Σ y T f(x,y) fluxul prin ăieur c(s,t) = Σ x S Σ y T c(x,y) cpcie ăieurii Lem 5.8: Fluxul prin ăieură = fluxul prin rețe f(s,t) = f Corolr 5.5: S, T ăieură orecre fluxul mxim ee limi uperior de cpcie ăieurii f c(s,t) Exemplu de ăieură inr-o rețe de flux S 2/8 /6 c /2 4/4 3/3 4/2 f(s,t) = 6 = f(,v) = f(,) + f(,) + f(c,d) d)+f(c)=4++4 f(c,) + + 4-3=6 d 2/2 4/9 T c(s,t) = c(,) + c(,) + c(c,d) = 8 2
Flux mxim ăieură minimă Teorem 5.25 (Flux mxim ăieură minimă): G = (V,E) rețe de flux urmăorele firmții un echivlene: f ee o funcție de flux in G.i. f ee flux mxim ol in G; rețeu rezidulă nu re căi rezidule; exiă o ăieură (S,T).i. f = c(s,t). lgorimul Ford Fulkeron Ford Fulkeron(G,,) Penru fiecre (u,v) in E f(u,v) = f(v,u) = 0 // inițilizre Câ imp Exiă o cle rezidulă p inre.. in c f (p) = min{c f (u,v) (u,v) din p} // cpcie rezidulă Penru fiecre (u,v) in p f(u,v) = f(u,v) + c f (p) Înorce f f(v,u) = -f(u,v) Complexie? 3
lgorimul Ford Fulkeron (2) Ford Fulkeron(G,,) Penru fiecre (u,v) in E f(u,v) = f(v,u) = 0 // O(E) Câ imp // O(?) Exiă o cle rezidulă p inre.. in // O(E) c f (p) = min{c f (u,v) (u,v) din p} // O(E) Penru fiecre (u,v) in p // O(E) f(u,v) = f(u,v) + c f (p) Înorce f f(v,u) = -f(u,v) Complexie? Exemplu Ford Fulkeron () 0/000 B 0/000 0/ D 0/000 C 0/000 /000 B 0/000 / D 0/000 C /000 /000 B /000 0/ D /000 C /000 000 B 000 000 C 000 Cle rezidulă: -B-C-D; C f = B 000 999 D 999 000 C Cle rezidul: -B-C-D; C f = B 999 999 G D 999 999 C Cle rezidul: -B-C-D; C f = D G G 4
Exemplu Ford Fulkeron (2) 2/000 B /000 / /000 C 2/000 D 000/000 B 000/000 0/ D 000/000 C 000/000 2 999 998 B C 998 999 Cle rezidul: -C-B-D; C f = 000 B După câți pși e junge l form finlă? 2 000 000 C 000 D D G Cle rezidul:ø Complexie Ford Fulkeron Complexie O(E * f mx ) f mx = fluxul mxim 5
lgorimul Ford Fulkeron dicuie Proleme ce po ă pră: Se foloec căi cu cpcie mică; Se pun fluxuri pe mi mule rce decâ ee nevoie. Îmunăățiri: Se leg căile rezidule cu cpcie mximă complexie v depinde in coninure de f mx i de vlore cpciăților; ț Se leg căile rezidule cele mi cure in ce cz complexie nu mi depinde de f mx ci numi de numărul de muchii (ex. Edmond-Krp: idenificre căilor rezidule minime prin plicre unui BFS) lgorimul Edmond Krp () Edmond Krp(G,, ) Penru fiecre (u,v) in E f(u,v) = f(v,u) = 0 // inițilizre Câ imp Exiă căi rezidule inre.. in Deermină cle rezidulă minimă p plicând BFS c f (p) = min{c f (u,v) (u,v) din p} // cpcie rezidulă Penru fiecre (u,v) in p f(u,v) = f(u,v) + c f (p) f(v,u) = -f(u,v) Înorce f Complexie? 6
lgorimul Edmond Krp (2) Edmond Krp(G,, ) Penru fiecre (u,v) in E f(u,v) = f(v,u) = 0 // O(E) Câ imp // O(E*V) [4] Exiă căi rezidule inre.. in // O(E) Deermină cle rezidulă minimă p plicând BFS // O(E) c f (p) = min{c f (u,v) (u,v) din p} // O(E) Penru fiecre (u,v) in p // O(E) f(u,v) = f(u,v) + c f (p) f(v,u) = -f(u,v) Înorce f Complexie? O(E 2 * V) Exemplu Edmond-Krp 0/000 B 0/000 0/ 0/000 C 0/000 0/000 C /000 D 000/000 B 000/000 0/ D 000/000 B 000/000 0/ D 000/000 C 000/000 000 B 000 000 C 000 Cle rezidulă: -B-D; C f = 000 000 B 000 000 C 000 Cle rezidulă: -C-D; C f = 000 000 B 000 D D 000 C 000 Cle rezidulă: Ø D G G 7
Pompre preflux () Idee: Simulre curgerii lichidelor inr-un iem de conduce ce legă noduri fle l divere înălțimi; Sur înălțime mximă (l începu); Inițil oe nodurile excepând ur un l înălțime 0; Deinți rămâne in permnență l înălțime 0! Pompre preflux (2) Exiă un preflux inițil in rețe oținu prin încărcre l cpcie mximă uuror conducelor ce plecă din ; Exceul de flux dinr-un nod poe fi oc inrun rezervor l nodului (No e(u)); Când un nod u re flux diponiil in rezervor i o conducă pre un l nod v nu ee încărcă comple înălțime lui u ee crecuă penru permie curgere din u in v. 8
Pompre preflux Definiții () G = (V,E) rețe de flux; Definiție: Preflux = f: V x V R fel încâ ă fie ifăcue rericțiile: f(u,v) c(u,v), (u,v) E repecre cpciății rcelor; f(u,v) = -f(v,u), u,v V imeri fluxului; Σ v V f(u,v) 0, u V \ {} conervre fluxului. Definiție: Suprîncărcre unui nod: e(u) = f(v,u) 0, u V \ {}. Pompre preflux Definiții (2) Definiție: O funcție h: V N ee o funcție de înălțime dcă îndeplineșe rericțiile: h() = V fixă; h() = 0 fixă; h(u) h(v) + penru orice rc rezidul (u,v) vriilă. Lem 5.9: G rețe de flux, h: V N ee o funcție de înălțime. Dcă u, v V, h(u) > h(v) +, unci rcul (u,v) nu ee rc rezidul. 9
Pompre preflux Meode foloie Pompre(u,v) // pompeză fluxul in exce (e(u) > 0) // re loc dor dcă diferenț deînălțime dinre u i v ee // (h(u) = h(v) + ), lfel nu e rc rezidul i nu ne inereeză d = min(e(u), c f (u,v)); // cnie de flux pompă f(u,v) = f(u,v) + d; // culizre flux pe rcul (u,v) f(v,u) = -f(u,v); // repecre imeriei e(u) = e(u) d; // culizre uprîncărcre l ur e(v) = e(v) + d; // culizre uprîncărcre l deinție Înălțre(u) // măreșe h(u) dcă u re flux in exce // (e(u) > 0) i u {, } (u,v) vem h(u) h(v) h(u) = + min{h(v) (u,v) } Pompre preflux Inițilizre Ini_preflux(G,, ) Penru fiecre (u V) e(u) = 0 // inițilizre exce flux in nodul u h(u) = 0 // inițilizre înălțime nod u Penru fiecre (v V) // inițilizre fluxuri f(u,v) = 0 f(v,u) = 0 h() = V // inițilizre înălțime ură Penru fiecre (u ucc() \ {}) // culizre flux + exce f(,u) = c(,u); e(u) = c(,u) f(u,) = -c(,u);e() = e() - c(,u); 20
Pompre preflux lgorim Pompre_preflux(G,, ) Ini_preflux(G,, ) // inițilizre prefluxului Câ imp () // câ imp po fce pompări u înălțări Dcă ( u V \ {, }, v V e(u) > 0 i c f (u,v) > 0 i h(u) = h(v) + ) // încerc ă pompez Pompre(u,v); coninuă; Dcă ( u V \ {, }, v V e(u) > 0 i (u,v) E f, h(u) h(v)) Înălțre(u); coninuă; // încerc ă înlț Înrerupe; ; // nu mi po fce nimic m jun l flux mx Înorce e() // e() = f = fluxul ol in rețe Complexie: O(V 2 * E) Giumle 266-269 Exemplu Pompre preflux () 3 G 6 5 6 Ini_preflux h() = 4 h() = h() = h() = 0 e() = 5 e() = e() = e() = 0 6 3 5/5 6 8 6 h() = 4 h() = 6 Inlre h() = h() = 0 () e() = 5 e() = e() = e() = 0 Pompre (,) 2
Exemplu Pompre preflux (2) h() = 4 h() = h() = h() = 0 e() = 5 e() = e() = e() = 0 5 3 5/5 5/6 6 8 6 Inlre () h() = 4 h() = h() = h() = 0 e() = 5 e() = e() = e() = 0 Pompre (,) 3 5/6 5/5 5/6 h() = 4 h() = h() = h() = 0 e() = 5 e() = e() = = e() = 0 Înreări? 44 22
Biliogrfie [] C. Giumle Inroducere in nliz lgorimilor - cp. 7 [2] hp://www.gmur.com/feure/99 9022/phdemo.zip [3] hp://www.policylmnc.org/gme/s rtuoril.hm 23