Sunteți pe pagina 1din 18

52

PROBLEME DE FLUX ÎN REÞELE

§ 1. Problema fluxului maxim.

Definiþie: Numim reþea (de transport) cu intrarea s ºi ieºirea t, 4-uplul


R = ( G , s, t , c) unde:
− G = (V , E ) este un digraf,
− s, t ∈V ; s ≠ t ; d G+ ( s) > 0; d G− > 0,
− c : E → R + ; c( e) se numeºte capacitatea arcului e.
Observaþie: Vom presupune cã V = {1, 2, ... , n} (n ∈ N )∗
ºi cã E = m . Pentru
simplificarea notaþiilor vom extinde funcþia c la c :V × V → R + prin

c( ij) dacã ij ∈ E


c(( i, j)) = 
0 dacã ij ∉ E

ºi vom nota c( (i , j )) = c ij .
Definiþie: Se numeºte flux în reþeaua R = ( G , s, t , c) o funcþie x :V × V → R , care
satisface

(i) 0 ≤ x ij ≤ c ij ∀ij ∈V × V

(ii) ∑ x − ∑ x = 0 ∀i ∈V − {s, t}
j∈V ji j∈V ij

Observaþie:
10 Dacã ij ∈ E atunci se numeºte fluxul (transportat) pe arcul ij. Evident,
condiþia (i) cere ca fluxul pe orice arc sã fie nenegativ ºi subcapacitar, iar condiþia (ii)
(legea de conservare a fluxului) cere ca suma fluxurilor pe arcele care intrã în vâ rful i
sã fie egalã cu suma fluxurilor pe arcele care ies din vâ rful i. Se putea cere ca fluxul sã
fie definit numai pe arcele reþelei, dar cu convenþia fã cutã la extensia funcþiei de
capacitate, se observã cã pentru perechile (i,j) care nu sunt arce în reþea condiþia (i)
impune ca fluxul sã fie 0, ºi evident cele douã definiþii sunt echivalente. O preferã m pe
cea datã , pentru simplitatea notaþiilor, deºi în implementã ri, structurile de date folosite
vor ignora perechile(i,j) care nu sunt arce în reþea.
53

20 Dacã se sumeazã relaþiile (ii) (pentru i ∈V − {s, t} ) se obþine:

 
0= ∑  ∑ x − ∑ x
i≠ s ,t j ∈V
ji
j ∈V
ij =∑
 i≠ s ,t
∑x
j ≠ s,t
ji −∑
i≠ s ,t
∑x +∑x
j ≠ s ,t
ij
i≠ s , t
si + ∑ xti − ∑ x is − ∑ x it =
i≠ s ,t i≠ s ,t i≠ s ,t

   
− ∑ x is − ∑ xsi  −  ∑ xit − ∑ xti 
 i i   i i 

adicã

 
∑x −∑x
j ∈V
jt
j ∈V
tj = − ∑ x js − ∑ x sj  .
 j ∈V j ∈V 

Definiþie: Dacã x este un flux în reþeaua R = ( G , s, t , c) atunci se numeºte


valoarea fluxului x numã rul
v( x) = ∑ x jt − ∑ x tj
j ∈V j ∈V

Se observã cã v(x) se poate interpreta ca fiind fluxul net care ajunge în ieºirea
reþelei sau (conform egalitã þii obþinute mai sus) fluxul net care iese din intrarea reþelei.
În orice reþea R = ( G , s, t , c) existã un flux, fluxul nul x ij = 0 ∀ij , de valoare
0.

Problema fluxului maxim. Datã R = ( G , s, t , c) o reþea, sã se determine un flux de


valoare maximã .

Observaþii: 10 Problema se poate formula, evident, ca o problemã de programare


liniarã :


max v

∑ x ji − ∑ xij = 0,∀i ≠ s, t
j j

∑ x js − ∑ x sj = − v
j j
∑ x − ∑ x = v
 j jt j tj

0 ≤ xij ≤ cij ∀ij

Particularitã þile combinatorii ale problemei, numã rul mare de restricþii ºi mai ales
54

dificultã þile legate de restricþiile de integritate ce s-ar putea impune variabilelor, care
uneori în practicã sunt esenþiale, au condus la dezvoltarea de metode specifice de
rezolvare.
Definiþie: Dacã P este un drum în G , multigraful suport al digrafului G, ºi
e = v i v j este o muchie a lui P atunci: dacã e corespunde arcului v i v j al lui G, e se
numeºte arc direct al drumului P; dacã e corespunde arcului v j v i al lui G, atunci e se
numeºte arc invers.
Definiþie: Fie R = ( G , s, t , c) ºi x flux în R. Se numeºte C-drum
(în R relativ la fluxul x) un drum D în G cu proprietatea cã ∀ij ∈ D( E) :
x ij < c ij dacã ij este arc direct, x ji > 0 dacã ij este arc invers.
Dacã D este C-drum ºi ij ∈ E( D) , se numeºte capacitate rezidualã a lui ij (relativ
la C-drumul D) numã rul

c ij − x ij dacã ij arc direct î n D



r ( ij) = 
xij dacã ij arc invers î n D.

Capacitatea rezidualã a drumului D este r ( D) = min e∈E( D) r ( e) .


Exemplu: Considerã m reþeaua desenatã mai jos, în care pe fiecare arc este
precizatã mai întâ i capacitatea ºi apoi fluxul:

2,1
2 4

3,1 3,2

1 1,0 1,0 1,1 6


s t
2,2 2,1
3 5
2,2

Atunci D : 1, 12, 2, 24, 4, 45, 5, 56, 6 este un C-drum de la s la t cu arcele directe


12( x12 = 1 < c12 = 3 ); 24( x24 = 1 < c24 = 2 ); 56( x56 = 1 < c56 = 2 ) ºi arcul invers
45( x54 = 1 > 0 ). Capacitatea reziduala a lui D este r( D) = min( min( 2 ,11
, ),1) = 1 .
Definiþie: Se numeºte drum de creºtere a fluxului x, în reþeaua R = ( G , s, t , c) ,
un C-drum de la s la t.
Lema 1. Dacã D este un drum de creºtere a fluxului x în reþeaua R = ( G , s, t , c) , atunci
55

x1 = x ⊗ r( D) definit prin

 —
x
 ij dacã ij ∉ E (D )

xij1 =  xij + r (D ) dacã ij ∈ E (D ), ij arc direct în D

 xij − r (D ) dacã ji ∈ E(D ), ji arc invers în D
( )
este flux în R ºi v x1 = v( x) + r( D).
Demonstraþie. Definiþia lui r(D) implica îndeplinirea de cã tre x1, a condiþiilor (i).
Condiþiile (ii) verificate de x, nu sunt afectate pentru nici un vâ rf i ∉ V( D) . Dacã i≠s,t
este un vâ rf al drumului D, i este incidentcu exact douã arce ale lui D, fie ele li ºi ik.
Avem urmã toarele cazuri posibile:

∑ x −∑ x j
1
ji j
1
ij = ∑ j ≠ l xji − ∑ j ≠ k xij + x1li − x1ik =
a) li ºi ik arce directe: ∑ x − ∑ j≠l ji j≠k
xij + xli + r( D) − xik − r( D) =

∑ x −∑ x j ji j ij =0

b) li ºi ik invers:
∑ x −∑ x = ∑ x −∑ x +x +x
j
1
ji j
1
ij j ≠ l ,k ji j ij
1
li
1
ki =

∑ x − ∑ x + x + r( D) + x − r( D) =
j ≠ l ,k ji j ij li ki

∑ x −∑ x −∑ x = 0
j ji j ji j ij

c) li invers, ik direct: similar cu b).


d) li invers, ik invers: similar cu a).
Valoarea fluxului x1 se obþine considerâ nd lt unicul arc al lui D incident cu t:
Dacã lt direct atunci:
v (x 1 ) = ∑ j x 1jt − ∑ j x tj1 = ∑ j ≠l x jt − ∑ j x tj + x lt1 = ∑ j ≠l x jt − ∑ j x tj + x lt + r (D ) = v ( x ) + r (D )
.
Dacã lt invers atunci:
v (x 1 ) = ∑ j x 1jt − ∑ j x tj1 = ∑ j x jt − ∑ j ≠l x tj − x tl1 = ∑ j x jt − ∑ j ≠l x tj − ( x lt − r (D )) = v ( x ) + r (D )

Pentru exemplul anterior, fluxul x 1 = x ⊗ r (D ) este precizat pe arce:

2 2 4
2
2
6
1

2 2
3 2 5
56

Observaþii:
10 Aceastã lemã justificã denumirea de drum de creºtere, precum ºi pe cea de
capacitate rezidualã .
20 Din definiþie, dacã D este un drum de creºtere, r(D)>0 ºi deci avem
v ( x ⊗ r (D )) > v (x ) . Rezultã cã x admite un drum de creºtere, x nu este flux de valoare
maximã .
Definiþie: Fie R = ( G , s, t , c) . Se numeºte secþiune în reþeaua R, o partiþie (S, T) a lui V
cu s ∈ S ºi t ∈ T . Capacitatea secþiunii (S, T) este:
c(S , T ) = ∑ ∑ cij
i∈S j∈T

(suma capacitã þilor arcelor de la S la T).

Lema 2. Dacã x este un flux în R = ( G , s, t , c) ºi (S, T) este o secþiune a reþelei, atunci


v (x ) = ∑
i∈S
∑ (x
j∈T
ij − x ji )

(valoarea fluxului este egalã cu fluxul net ce trece prin orice secþiune.)
Demonstraþie:
     
v ( x ) =  ∑ x jt − ∑ x tj  − 0 = − ∑ x js − ∑ x sj  − ∑  ∑ x ji − ∑ x ij  =
 j j   j j  i∈S , i ≠ s  j j 
 
∑  ∑ x − ∑ x  = ∑ ∑ (x ij − x ji ) + ∑ ∑ (x ij − x ji ) = ∑ ∑ (x ij − x ji )
ij  ji
i∈S  j j  i∈S j∈S i∈S j∈T i∈S j∈T

Lema 3. Dacã x este un flux în R = ( G , s, t , c) ºi (S, T) este o secþiune, atunci:


v ( x ) ≤ c (S , T )
Demonstraþie:
v ( x ) = ∑ ∑ (x ij − x ji ) (lema 2 )
i∈S j∈T

≤∑
i∈S
∑ (s
j∈T
ij − x ji ) (x ij ≤ cij )

≤∑ ∑c ij (x ji ≥ 0)
i∈S j∈T

Observaþii:
− − −
1) Dacã x este un flux în R = ( G , s, t , c) ºi ( S , T ) o secþiune astfel încâ t
v ( x ) = c (S , T ) , atunci ∀x flux în R v ( x ) ≤ c (S , T ) = v ( x ) , deci x este flux de
valoare maximã . 2) În exemplul dat, x1 este flux de valoare maximã întrucâ t
v (x 1 ) = 4 = c({1,2,3}{ , 4,5,6})

Teorema 1. Un flux este de valoare maximã într-o reþea R, dacã , nu existã drumuri de
creºtere a fluxului x în reþeaua R.

Demonstraþie: Dacã x este de valoare maximã ºi P ar fi un drum de creºtere a lui x în R


57

atunci x ′ = x ⊗ r (P ) ar avea valoarea v (x ′) = v (x ) + r (P ) > v (x ) (din lema 1),


contrazicâ nd faptul cã x este de valoare maximã .
Reciproc, fie x un flux în R care nu admite drumuri de creºtere.
Considerã m S = {i i ∈ V ∧ ∃D C - drum de la s la i}.
Evident s ∈ S (existã D de lungime 0) ºi t ∉ S (nu existã C-drum de la s la t).
Fie T = S − V . Rezultã cã (S, T) este o secþiune. Sã observã m cã ∀i ∈ S ºi ∀j ∈ T avem:
dacã ij ∈ E atunci xij = cij ºi
dacã ji ∈ E atunci x ji = 0
(altminteri C-drumul de la s la i se poate extinde la un C-drum de la s la j). Deci,
conform lemei 2, v ( x ) = ∑ ∑ (x ij − x ji ) = ∑ ∑ (cij − 0) = c (S , T ) ºi prin urmare x este
i∈S j∈T i∈S j∈T

flux de valoare maximã .

Teorema 2. Dacã toate capacitã þile sunt întregi, atunci existã un flux de valoare
maximã cu toate componentele întregi.

Demonstraþie: Se considerã urmã torul algoritm:


begin
1: x0=0; i:=0;
2: while (∃Pi drum de creºtere relativ la xi) do begin
x i +1 := x 1 ⊗ r (Pi );
i:=i+1;
end
end.

Se observã cã “xi are componante întregi” este un invariant al algoritmului (din


definiþia lui r(Pi)), dacã toate capacitã þile sunt întregi, rezultã cã r(Pi) este întreg în
ipoteza cã xi e întreg) ºi cã la fiecare iteraþie a pasului 2 valoarea fluxului curent creºte
cu mã car o unitate, deci pasul 2 se repetã de cel mult c({s},V − {s}) ∈ Z + ori. Fluxul final
obþinut este, conform teoremei 1, de valoare maximã .
Observaþie. Algoritmul, descris mai sus, este finit ºi în cazul capacitã þilor
raþionale.

Teorema 3. ( Ford-Fulkerson,1956 ) (flux maxim-secþiune minimã ). Valoarea maximã a


unui flux în reþeaua R = ( G , s, t , c) este egalã cu capacitatea minimã a unei secþiuni a
reþelei.

Demonstraþie: Dacã dispunem de un algoritm care, pornind de la un flux iniþial


x0
(x0 existã întotdeauna, de exemplu x0=0), construieºte într-un numã r finit de paºi un flux
58

x, care nu admite drumuri de creºtere, atunci secþiunea construitã în demonstraþia


teoremei 1 satisface împreunã cu x enunþul teoremei.
Pentru cazul capacitã þilor raþionale algoritmul descris în demonstraþia teoremei
2, satisface aceastã condiþie.
Pentru cazul capacitã þilor real vom prezenta, mai tâ rziu, un astfel de algoritm,
datorat lui Edmonds ºi Karp (1972).
Observaþii:

i) Se observã cã în demonstraþia teoremei 3 avem nevoie de fapt, doar sã


arã tã m cã existã un flux x de valoare maximã ºi apoi sã -i aplicã m construcþia din
demonstraþia teoremei 1; existenþa fluxului x maxim rezultã imediat, considerâ nd
transcrierea problemei fluxului maxim ca o problemã de programare liniarã ; am
preferat demonstraþia de mai sus care (deºi va fi completatã dupã analiza
algoritmului lui Edmonds-Karp) este constructivã .
ii) Importanþa algoritmicã a teoremei 3 este evidentã : mulþimea secþiunilor
reþelei este finitã , pe câ nd mulþimea fluxurilor din reþea este infinitã .
iii) Prezentã m în continuare un exemplu datorat lui Lovasz (1970) care aratã
cã în cazul datelor iraþionale (pentru comoditate vom considera capacitã þile
iraþionale, dar fluxul iniþial x0 cu componente iraþionale) un algoritm de tipul
celui descris în demonstraþia teoremei 2, nu numai cã nu se va opri (va repeta la
infinit pasul 2), ci va produce un ºir de fluxuri x n n ∈ N cu proprietatea cã
v (x n ) nu converge la valoarea fluxului maxim.

Fie reþeaua desenatã mai jos în care fiecare arc are capacitatea 1 ºi are precizat
pe el fluxul iniþial, unde α este unica rã dã cinã realã a ecuaþiei t 3 + t − 1 = 0 α ∈ (0,1) .
59

1
α2
0
0

2 0
0
0 α2
t
s
1-α 0

3
1-α
0
5
α

Evident cã v (x 0 ) = α 2 . Considerã m
P1 = s,1,2,3,4, t x 1 = x 0 ⊗ r (P1 )
P2 = s,1,4,3,2, t x 2 = x 1 ⊗ r (P2 )
P3 = s,3,4,1,2, t x 3 = x 2 ⊗ r (P3 )
P4 = s,3,2,1,4, t x 4 = x 3 ⊗ r (P4 )

Oricare ar fi m ≥ 0 , fluxul curent x 4 m va fi transformat în


x 4 m +1 , x 4 m + 2 , x 4 m +3 , x 4 m + 4 , folosind creºteri succesive pe drumurile P1, P2, P3, P4, valoarea
sa crescâ nd cu α 4m +1 , α 4 m + 2 ,α 4 m + 3 ,α 4 m + 4
60

Valorile fluxului pe arcele directe s1 ºî s3 se calculeazã în mod similar. Evident,


valoarea fluxului maxim este 4, considerâ nd câ te o unitate de flux pe fiecare arc si ºi it
(acesta este flux maxim pentru cã c({s}{
, 1,2,3,4, t}) = 4 .)
v (x ) = α + (α + ... + α ) ∀m ≥ 1
4m 2 4m
ºi deci
α 1−α 3
lim v (x 4 m ) = α 2 + =α2 + = 2α 2 + α + 1 < 4 )
m→∞ 1−α 1−α

Algoritmul lui Ford ºi Fulkerson pentru aflarea unui flux maxim


Se va folosi un procedeu de etichetare a vâ rfurilor reþelei, în vederea depistã rii
drumurilor de creºtere a fluxului curent x. Dacã nu existã drumuri de creºtere, fluxul va
fi de valoare maximã .
Eticheta atribuitã unui vâ rf j ∈ V are trei componente (e1, e2, e3) unde
e1 ∈ V ∪ {0}; e2 ∈ (direct , invers ); e3 ∈ R+ ºi au urmã toarea semnificaþie:
− dacã e2=direct ºi e1=i atunci ∃ un C-drum P de la s la j cu ultimul arc ij, arc direct ºi
r(P)=e3.
− dacã e2=invers ºi e1=i atunci ∃ un C-drum P de la s la j cu ultimul arc ij, arc direct ºi
r(P)=e3.
Iniþial, se eticheteazã sursa s cu eticheta (0,..,∞). Celelalte vâ rfuri primesc etichetã
prin “cercetarea” vâ rfurilor deja etichetate:
Dacã i este un vâ rf etichetat, atunci ∀j ∈ V
dacã j neetichetat ºi ij ∈ E ºi x ij < cij atunci
j primeºte eticheta e = (i, direct , min(e3 [i ], cij − x ij ))
dacã j neetichetat ºi ij ∈ E ºi x ij > 0 atunci
j primeºte eticheta e = (i, invers, min(e3 [i ], x ji ))
Evident, în acest fel se respectã semnificaþia celor trei componente ale etichetelor.
Numim aceastã procedurã etichetare(i).
Atunci câ nd în procedura de etichetare s-a atribuit etichetã vâ rfului t, s-a obþinut

1 1 1 1 1
1-∝4m 1-∝4m+3 1-∝4m+3 1 1-∝4m+4

2 2 2 2 2


∝4m+ 0 ∝4m+ 0
0 2 2 ∝4m+4 0 ∝4m+
3
0 ∝4m+
6
4m+1 4m+4
∝ ∝
3 3 3 3 3

1
1-∝
4m+1
1-∝4m+2 1-∝4m+5 1-∝4m+5
4 4 4 4 4
61

un drum de creºtere P a fluxului curent, de capacitate rezidualã r (P ) = e3 [t ] ºi ale cã rui


vâ rfuri se depistezã în O(n) explorâ nd prima componentã a etichetelor. Modificarea
fluxului x ⊗ r (P ) se executã în acest mers înapoi, tot în O(n)
Pentru noul flux se reia procedura de etichetare. Dacã toate vâ rfurile etichetate
au fost cercetate ºi nu s-a reuºit etichetarea vâ rfului t, rezultã cã fluxul curent nu admite
drumuri de creºtere, este deci de valoare maximã , iar dacã S=mulþimea vâ rfurilor
etichetate atunci (S, V-S) este o secþiune de capacitate minimã (conform teoremei 1).

Descrierea algoritmului
Begin
1: Se alege x = (x ij ) un flux iniþial (posibil fluxul nul);
se eticheteazã s cu (0,..,∞)
2: while (∃ vâ rfuri etichetate necercetate) do begin
“alege” un vâ rf etichetat ºi necercetat i;
etichetare(i);
if (t a primit etichetã ) then begin
modificã fluxul pe drumul dat de etichete;
ºterge toate etichetele;
eticheteazã s cu (1,..,∞)
end
end;
3: S := {i i ∈ V , i are etichetã}
T := V − S
x este flux de valoare maximã
(S, T) este secþiune de capacitate minimã .
end.

Complexitatea algoritmului: Pentru fiecare creºtere a fluxului, sunt necesare cel


mult 2m(m = E ) inspecþii de arce în vederea etichetã rii. Dacã toate capacitã þile sunt
întregi atunci vor fi necesare cel mult v (v=valoarea fluxului maxim) creºteri succesive.
Rezultã cã algoritmul are complexitatea O(mv). Dacã U este o margine superioarã a
capacitã þilor arcelor atunci v ≤ (n − 1)U ( (n − 1)U este o margine superioarã a capacitã þi
secþiunii ({s},V − {s}) ), deci algoritmul are complexitatea O(nmU).
Observaþii.
10 dezavantajele algoritmului sunt legate de neconvergenþa în cazul capacitã tilor
iraþionale (deºi practic, în implementã ri nu este cazul), ºi de faptul cã mã rimile
capacitã þilor influenþeazã comportarea sa, aceasta neconstituind o mã surã a
volumului datelor de intrae. Exemplu:
62

Dacã “alegerea”, din pasul 2 al algoritmului, se face ca drumurile de creºtere


succesive (pornind de la fluxul nul) sã fie P1, P2, P1, P2,...unde P1=1,2,3,4 ;
P2=1,3,2,4 atunci, fiecare creºtere a fluxului mã reºte cu 1 valoarea fluxului
curent ºi, deci, vor fi necesare 2M creºteri, ceea ce este inadmisibil pentru M∈Z+
foarte mari.
0
2 Aceste dezavantaje pot fi evitate dacã alegerile vâ rfurilor etichetate supuse
cercetã rii se fac judicios. Primii care au observat acest fenomen, au fost Dinic
(1970) ºi independent, Edmonds ºi Karp (1972).

Modificarea lui Edmonds ºi Karp a algoritmului lui Ford & Fulkerson


Numim drum minim de creºtere a fluxului x în reþeaua R, un drum de creºtere de
lungime minimã printre toate drumurile de creºtere.
Fie x un flux oarecare în reþeaua R. Definim ºirul de fluxuri xk în R astfel:
x 0 := x;

2
M M

s 1 1 4 t

M M
3
x k := x k −1 ⊗ r (Pk −1 ), Pk este un drum minim de creºtere relativ la xk-1; k=1,2,...
Vom dovedi cã ºirul de fluxuri astfel definit este finit.
Notã m, pentru ∀i ∈ V ºi ∀k = 0,1,2,...
σ ik = lungimea minimã a unui C-drum de la s la i în R relativ la fluxul xk.
τ ik = lunngimea minimã a unui C-drum de la i la t în R relativ la fluxul xk.

Lema 4. Pentru ∀i ∈ V ºi ∀k = 0,1,2,... avem

σ ik +1 ≥ σ ik ºi τ ik +1 ≥ τ ik
63

Demonstraþie: Demonstrã m numai monotonia lui σ, în mod similar se dovedeºte


monotonia lui τ.
Presupunem cã existã un cel ma mic k astfel încâ t existã i ∈ V cu σ ik +1 < σ ik .
{ }
Considerã m i0 ∈ V astfel încâ t σ ik0 +1 = min σ ik +1 i ∈ V ,σ ik +1 < σ ik . Întrucâ t σ sk = 0 ∀k ,
rezultã cã σ ik0 +1 > 0 ºi cã pe C-drumul de lungime σ ik0 +1 de la s la i0 relativ la xk+1 existã un
penultim vâ rf j, care evident satisface (a) σ kj +1 = σ ik0 +1 − 1 (pentru cã se aflã pe un C-drum
de lungime minimã ) ºi (b) σ kj +1 ≥ σ kj (din alegerea lui i0). Avem de analizat douã situaþii:

i) ji0 este arc direct pe C-drumul de lungime σ ik0 +1 de la s la i0.


Atunci, x kji+0 1 < c ji0 . Rezultã cã x kji0 = c ji0 , adicã în Pk, ji0 a fost arc invers[dacã
x kji0 < c ji0 , atunci σ ik0 ≤ σ kj + 1 ≤ σ kj +1 = σ ik0 +1 , contrazicâ nd alegerea lui i0 (în
ultimele douã relaþii s-au folosit succesiv (b) ºi (a))]. Cum Pk este drum minim
de creºtere în R relativ la xk , rezultã cã σ kj = σ ik0 + 1 . Deci,
σ ik0 +1 + 1 = σ kj ≤ σ kj +1 = σ ik0 +1 − 1 < σ ik0 − 1 , contradicþie.
ii) Ji0 este arc invers pe C-drumul de lungime σ ik0 +1 de la s la i0.
Atunci, xik0 +j 1 > 0 . Rezultã cã xik0 j = 0 ºi deci i0j a fost arc direct în Pk (dacã
xik0 +j 1 > 0 atunci, σ ik0 ≤ σ kj + 1 ≤ σ kj +1 = σ ik0 +1 , contrazicâ nd alegerea lui i0). Cim
Pk este un drum minim de creºtere în R relativ la xk rezultã cã
σ ik0 + 1 = σ kj ≤ σ kj +1 = σ ik0 +1 − 1 < σ ik0 − 1 , contradicþie.
În ambele situaþii s-a obþinut o contradicþie, ºi deci, rezultã cã
σ ik +1 ≥ σ ik ∀i ∈ V ºi ∀k .

Teorema 4. Dacã x=x0 este un flux oarecare în reþeaua R, atunci ºirul de fluxuri x1, x2,...
obþinut din x0 prin creºteri succesive pe drumuri minime de creºtere, are cel mult
mn mn
elemente (în cel mult creºteri succesive, se obþine un flux care nu admite
2 2
drumuri de creºtere).

Demonstraþie: Dacã P este un drum de creºtere relativ la un flux în reþeaua R ,


cu capacitate rezidualã r(P) vom numi arc critic în P orice arc e ∈ P cu r (e ) = r (P ) . Sã
observã m cã în x ⊗ r (P ) , fluxul pe arcele critice devine sau egal cu capacitatea (între
arcele directe) sau egal cu 0 (pentru arcele inverse).
Fie ij un arc critic pe drumul minim de creºtere Pk relativ la xk. Lungimea lui Pk este:

σ ik + τ ik = σ kj + τ kj
64

Cum ij este critic în Pk, în xk+1 nu va putea fi folosit în aceeaºi direcþie ca în Pk. Prima
oarã câ nd fluxul pe arcul ij se va modifica, el va apare într-un drum de creºtere Pl cu l>k
relativ la xl ºi va fi folosit în direcþie opusã .
Avem deci douã cazuri:
i) ij direct în Pk. Atunci σ kj = σ ik + 1 . În Pl ij va fi arc invers, deci
σ il = σ lj + 1 . Rezultã , σ il + τ il = σ lj + 1 + τ il ≥ σ kj + 1 + τ ik = σ ik + τ ik + 2 (s-a folosit
lema 1). Am obþinut cã lg(P l ) ≥ lg(P k ) + 2 .
ii) ij arc invers în Pk. Atunci σ ik = σ kj + 1 . În Pl ij va fi arc direct, deci
σ lj = σ il + 1 . Rezultã , σ lj + τ lj = σ il + 1 + τ lj ≥ σ ik + 1 + τ kj = σ kj + τ kj + 2 . Deci,
lg(P l ) ≥ lg(P k ) + 2 .
Rezultã cã orice drum minim de creºtere în care arcul ij este critic este cu mã car
douã arce mai lung decâ t precedentul în care ij a fost critic. Cum, un drum în G
are cel mult n-1 arce, rezultã cã un arc fixat nu poate fi critic în procesul de
n
creºtere mai mult de ori. Cum orice drum de creºtere are cel puþin un arc critic,
2
mn
rezultã cã nu vom avea mai mult de drumuri minime de creºtere, în ºirul
2
mn
construit, Deci dupã cel mult creºteri, se obþine un flux care nu admite
2
drumuri de creºtere.

Consecinþã . Dacã R = ( G , s, t , c) este o reþea, atunci existã un flux care nu admite


drumuri de creºtere.

Observaþii:
10 Rezultã de aici, cã demonstraþia teoremei 3 este completã .
20 S-ar putea pune întrebarea dacã nu cumva, cosiderarea drumurilor minime de
creºtere, mã reºte complexitatea algoritmului de flux maxim ?
Rã spunsul este însã banal:

Lema 5. Dacã , în pasul 2 al algoritmului lui Ford ºi Fulkerson, alegerea vâ rfurilor


etichetate în vederea cercetã rii se face dupã regula “primul etichetat-primul cercetat”,
atunci drumurile de creºtere care se depisteazã sunt cu numã r minim de arce.

Demonstraþie: Fie P un drum de creºtere depistat ºi fie P’ un drum minim de


creºtere. Presupunem cã lg(P ) ≥ lg(P ' ) . Considerã m arcele lor
65

P : si1 , i1i2 , K , ik −1ik , ik ik +1 , ik +1ik + 2 , K , ik +l −1t lg(P ) > lg(P ′)


P ′ : si1 , i1i2 , K , ik −1ik , ik jk +1 , jk +1 jk + 2 , K , jk +l ′−1t lg(P ′) = k + l ′; l ′ < l.

Conform regulii de etichetare ik+1 primeºte etichetã înaintea lui jk+1, dar jk+1 primeºte
etichetã înaintea lui ik+2; jk+2 primeºte etichetã înaintea lui ik+3 ºi aºa mai departe, obþinem
inductiv cã t primeºte etichetã înaintea lui ik+l’-1, deci t primeºte etichetã pe drumul P’,
înainte de a primi etichetã pe drumul P, absurd.
Observaþie: Regula “primul etichetat-primul cercetat” corespunde unei explorã ri
b f s a fâ rfurilor cercetate, ceea ce se poate realiza, utilizâ nd o coadã pentru memorarea
vâ rfurilor etichetate. Aceasta nu afecteazã complexitatea algoritmului, care va necesita
tot O(m) operaþii pentru fiecare creºtere a fluxului ºi folosind teorema 4 obþinem:

Teorema 5. (Edmonds-Karp 1972)

Dacã se modificã algoritmul lui Ford ºi Fulkerson cu precizarea alegerii b f s a


vâ rfurilor etichetate în vederea cercetã rii, atunci, fluxul maxim se obþine în O(m2n)
operaþii.

Algoritmi de tip flux pentru problema fluxului maxim

Fie R = ( G , s, t , c) o reþea.
Definiþie. Se numeºte preflux în reþeaua R, o funcþie x:E→R astfel încâ t

(i) 0 ≤ xij ≤ cij ∀ij ∈ E


(ii) ∀i ∈ s ei = ∑x
j: ji∈E
ji − ∑x
j:ij∈E
ij ≥0

Numã rul ei i∈V-{s, t} se numeºte excesul din vâ rful i.


Dacã i∈V-{s, t} ºi ei>0 atunci i se numeºte nod activ. Dacã ij∈E xij va fi numit fluxul pe
arcul ij.
Observaþii:
10 Dacã în reþeaua R nu existã noduri active, atunci prefluxul x este flux de la s
la t în R de valoare et.
20 Ideea algoritmilor de tip preflux este: se porneºte cu un preflux în R ºi se
transformã prin modificã ri ale fluxului pe arce într-un flux care nu admite drumuri de
creºtere.
30 În definiþia unui preflux, nu am mai utilizat convenþia cã vom introduce toate
perechile de arce din digraful complet simetric de ordin n, întrucâ t în analiza
algoritmilor pe care îi vom prezenta va fi esenþialã reprezentarea digrafului G cu
ajutorul listelor de adiacenþã . Totuºi, vom considera cã dacã ij∈E atunci ºi ji∈E
(altminteri, adã ugã m arcul ji cu capacitate 0).
66

Definiþie: Dacã x este un preflux în R ºi ij∈E, atunci capacitatea rezidualã a


arcului ij este
rij = cij − xij + x ji

(reprezentâ nd fluxul adiþional ce poate fi “trimis” de la nodul i la nodul j utilizâ nd arcele


ij ºi ji).
Observaþie. Peste tot, în cele ce urmeazã , a “trimite” flux de la i la j înseamnã sã
creºtem fluxul pe arcul ij sau sã micºorã m fluxul pe arcul ji.
Definiþie: Se numeºte C-drum relativ la prefluxul x, un drum al lui G ale cã rui
arce au capacitatea pozitivã .

Definiþie: Se numeºte funcþie de distanþã în R relativ la prefluxul x, o funcþie


d : V → Z+ care satisface:

(D1) d (t ) = 0

(D2) ∀ij ∈ E , rij > 0 ⇒ d (i ) ≤ d ( j ) + 1

Observaþii:
10. Dacã P este un C-drum relativ la prefluxul x în R de la i la t atunci
d (i ) ≤ lg(P ) (arcele unui C-drum au capacitate rezidualã pozitivã ºi se aplicã (D2)).
Rezultã cã d (i ) ≤ τ i (lungimea minimã a unui C-drum de la i la t).
20. Vom nota cu A(i), pentru orice vâ rf i, lista sa de adiacenþã , care poate conþine
arcele ij∈E.

Definiþie. Fie x un preflux în R ºi d o funcþie de distanþã relativ la x.


Un arc ij∈E se numeºte admisibil dacã

rij > 0 ∧ d (i ) = d ( j ) + 1 .

Dacã R este o reþea, considerã m iniþializare urmã toarea procedurã care construieºte în
O(m) un preflux x ºi o funcþie de distanþã d corespunzã toare acestuia, astfel:

procedure iniþializare;
begin
for ∀ij∈E do
67

if i=s then xij:=csj else xij:=0;


d[s]:=n;
d[t]:=0;
for ∀i∈V-{s, t} do d[i]:=1;
end.

Observaþii:
10. Dupã execuþia acestei proceduri, ∀sj∈A(s) avem rsj=0, deci alegerea lui
d (s ) = n nu afecteazã condiþia D2. Pentru arcele cu capacitate rezidualã pozitivã de
forma js D2 este evident verificatã .
20. Alegerea lui d (s ) = n are urmã toarea interpretare: “ nu existã C-drum de la s
la t în R relativ la x” (întrucâ t, altminteri, ar trebui ca lungimea acestuia sã fie ≥ n).
Dacã , în algoritmii de tip preflux vom pã stra acest invariant, atunci câ nd x va deveni
flux, va rezulta cã nu admite drumuri de creºtere ºi deci x va fi de valoare maximã .

Considerã m urmã toarele proceduri

procedure pompeazã (i : V — {s, t});


begin
alege ij∈A(i) ij admisibil;
“trimite” δ=min(ei,rij) unitã þi de flux de la i la j
end;

Dacã δ=rij vom spune cã avem o pompare saturatã , altminteri pomparea este
nesaturatã .

procedure reetichetare(i : V — {s, t});


begin
d(i):=min{d(j)+1  ij∈A(i) ∧ rij > 0}
end;

Schema generalã a unui algoritm de tip preflux este:

begin
iniþializare;
while ∃ noduri active în R do begin
selecteazã un nod activ i;
if ∃ arce admisibile în A(i)
then pompeazã (i)
else reeticheteazã (i)
end
end.
68

Lema 6. Algoritmul de tip preflux, descris mai sus, are ca invariant “d este funcþie de
distanþã relativ la prefluxul x”. La fiecare reetichetare(i), d(i) creºte strict.

Demonstraþie: Procedura iniþializare construieºte, evident, o funcþie de distanþã


relativ la prefluxul iniþial. Dacã înaintea execuþiei unei iteraþii a lui while, d este funcþie
de distanþã relativ la prefluxul relativ x, atunci:
a) dacã se executã pompare(i), atunci singura pereche ce poate viola D2 este d(i)
ºi d(j). Cum arcul ij a fost ales admisibil, avem d(i)=d(j)+1. Dupã pompare, arcul
ji poate avea rji>0 (fã rã ca înainte sã fi fost), dar condiþia d(i)≤d(j)+1 este, evident,
satisfã cutã .
b) dacã se executã reetichetare(i), modificarea lui d(i) se face astfel încâ t D2 sã
rã mâ nã valabilã pentru orice arc ij cu rij>0. Cum apelul lui reetichetare implicã
d(i)<d(j)+1 ∀ij cu rij>0, rezultã cã dupã apel d(i) creºte mã car cu o unitate.
Pentru finitudinea algoritmului va trebui sã dovedim cã , dacã , pe parcursul lui,
avem un nod i activ, atunci în A(i) va exista mã car un arc ij cu rij>0. Aceasta rezultã din

Lema 7. Dacã pe parcursul algoritmului, i0 este un nod activ, atunci existã un C-drum de
la i0 la s, în R, relativ la prefluxul curent x.

Demonstraþie: Dacã x este un preflux în R, atunci x se poate scrie ca o sumã


finitã
x = x 1 + x 2 + K x p , unde fiecare xk satisface:
{ }
mulþimea Ak = ij ij ∈ E , x ijk ≠ 0 este
a) mulþimea arcelor unui drum de la s la t,
b) mulþimea arcelor de la s la un nod activ,
c) mulþimea arcelor unui circuit.
În plus, în situaþiile a) ºi c), xk este un flux.
(Demonstraþia rezultã algoritmic, prin construirea mai întâ i a mulþimilor a), ºi apoi a
celor de tip c) ºi b), cã utâ nd la fiecare etapã inversul unui drum cu proprietã þile dorite;
prefluxul construit se scade din cel curent; excesele nenegative, asigurã posibilitatea
construcþiei, care este finitã , întrucâ t dupã fiecare etapã numã rul arcelor cu flux curent
nul creºte.)
Cum i0 este un nod activ în R relativ la x, rezultã cã situaþia b) va apare pentru
nodul i0 (întrucâ t situaþiile b) ºi c) nu afecteazã excesul din nodul i0). Arcele inverse ale
acestui drum au capacitatea rezidualã strict pozitivã ºi ele formeazã C-drumul din
enunþul lemei.

Consecinþa 1. ∀i∈V d(i)<2n

Demonstraþie: Dacã i nu a fost reetichetat, atunci d(i)=1<2n. Dacã i a fost


reetichetat, atunci înainte de reetichetare i este nod activ, deci existã C-drum de la i la s
de lungime cel mult n-1. Din modul de modificare a lui d(i) ºi din D2 rezultã cã dupã
reetichetare d(i)≤d(s)+n-1=2n-1, întrucâ t d(s)=n nu se schimbã pe parcursul
69

algoritmului.

Consecinþa 2. Numã rul total de apeluri ale procedurii reetichetare este mai mic decâ t
2n2.

Demonstraþie: Fiecare din cele n-2 vâ rfuri ce pot fi supuse etichetã rii poate fi
etichetat de cel mult 2n-1 ori, avâ nd în vedere consecinþa 1, lema 6, ºi etichetarea
iniþialã .

Consecinþa 3. Numã rul total de pompã ri saturate este ≤ nm.

Demonstraþie: Dupã ce un arc ij devine saturat (situaþie în care d(i)=d(j)+1), pe


acest arc nu se va mai putea trimite flux pâ nã câ nd nu se va trimite flux pe arcul ji
situaþie în care vom avea d’(j)=d’(i)+1≥d(i)+1=d(j)+2; aceastã schimbare de flux nu va
avea loc pâ nã ce d(j) nu creºte cu douã unitã þi. Deci, un arc nu poate deveni saturat mai
mult de n ori ºi în total vom avea cel mult mn pompã ri saturate.

Lema 8. (Goldberg ºi Tarjan 1986) Numã rul pompã rilor nesaturate sete cel mult 2n2m.

Lema 9. La terminarea algoritmului x este flux de valoare maximã .

Demonstraþie: Din lemele 6 ºi 8 ºi consecinþa 3 rezultã cã algoritmul se terminã


dupã cel mult 2n2m iteraþii ºi cum d(s)=n nu se modificã pe parcurs, rezultã cã fluxul
obþinut este fã rã drumuri de creºtere.

S-ar putea să vă placă și