Sunteți pe pagina 1din 1

Algoritmul Ford Fulkerson

Fie G o reea de transport cu intrarea n nodul s i ieirea n nodul t. Determinarea unui flux de valoare maxim ce trece prin
reeaua de transport G de la s la t parcurge urmtoarele etape:

Etapa 1. Construirea de drumuri de la s la t i saturarea lor


Iniial se consider c n reeaua G este propagat fluxul nul (ij = 0 pentru orice arc (i, j)). Se identific drumuri nesaturate n
direcia s t ntre intrarea s i ieirea t. Fie un drum nesaturat de la s la t i:
= min c (u ) , c (u ) = c(u) (u).
u

Fluxul propagat de-a lungul drumului de valoare satureaz cel puin un arc (de fapt, toate acele arce care au c (u ) = ).
Pe fiecare arc al reelei va circula fluxul:
(u ) dac u
'(u) = .
(u ) dac u
Valoarea fluxului n reeaua G va fi:
v(') = v() + .

n identificarea acestor drumuri vom avea grij ca o muchie s nu fie folosit dect ca o rut ntr-un singur sens. Odat cu
definirea unui drum de la s la t i saturarea lui se orienteaz i muchiile reelei. Pe fiecare arc se nsumeaz fluxurile propagate succesiv.
Construirea unui flux continu atta timp ct este posibil s identificm drumuri nesaturate de la s la t. n general, pentru o
organizare eficient a drumurilor folosite, la fiecare pas se poate considera drumul definit de rutele permise "cele mai de sus". Aceasta
permite s identificm ct mai multe drumuri i s obinem n prima etap un flux cu o valoare ct mai mare i s mrim convergena
algoritmului.
Fluxul propagat la finalul primei etape are valoarea egal cu suma fluxurilor propagate pe fiecare drum.

Etapa 2 Testarea maximalitii fluxului obinut n Etapa1 i identificarea lanurilor de augmentare de la s la t


Se aplic procedeul de marcare. Cnd se aplic regula b) spunem c se face marcare n sensul orientrii rutei de la s la t (s
t) cu condiia ca arcul s fie nesaturat, iar cnd se aplic regula c) se face marcarea n sens invers orientrii rutei, de la t la s (t s) cu
condiia ca fluxul s fie nenul.
n aceast etap, cu ajutorul etichetelor se identific un lan de augmentare care unete intrarea s cu ieirea t. Sunt posibile
dou situaii dup aplicarea procedeului de marcare:
1. Ieirea t nu este marcat. n aceast situaie, fluxul curent are valoarea maxim. Valoarea fluxului prin reea este suma
fluxurilor propagate pe toate drumurile de la etapa 1 i pe toate lanurile de augmentare de la etapa 2. Algoritmul continu cu etapa 3.
2. Ieirea t este marcat. n aceast situaie, s-a reuit marcarea unui lan de augmentare care unete intrarea s cu ieirea t. Se
calculeaz valoarea:
= min { min [c(u) (u)] , min (u ) }
uB uC
unde B este mulimea arcelor din lanul pentru care s-a efectuat marcarea dup regula b) iar C este mulimea arcelor din lanul pentru
care s-a efectuat marcarea dup regula c). innd cont de regulile de marcare este clar c > 0 i noul flux ' propagat de-a lungul
lanului mrete valoarea fluxului cu valoarea iar noile fluxuri pe arcele reelei se calculeaz cu relaia:
(u) dac u B

'(u) = (u ) - dac u C
(u )
n rest
i
v(') = v() +
Se reia etapa 2 n cadrul unei noi iteraii.

Etapa 3. Determinarea unei tieturi de capacitate minim


n ultima marcare, efectuat n etapa 2, fie T* mulimea nodurilor nemarcate, conform aplicrii regulilor a), b) i c) de marcare
n vederea identificrii unui lan de augmentare de la s la t i S* mulimea nodurilor marcate. Evident s S*, t T* i S* T* = V, unde
V este mulimea nodurilor reelei G.
Tietura (S*, T*) de capacitate minim este:
(S*, T*) = {(i, j) / i S*, j T*}
cu capacitatea:
c(S*, T*) =
c(u )
u( S* ,T* )

n aceast etap, se verific (teorema Ford-Fulkerson) dac, ntr-adevr, fluxul are valoare maxim. Valoarea maxim a fluxului
este egal cu valoarea minim a capacitilor tieturilor n reea:
v(*) = max v ( ) = min c ( S , T ) = c(S*, T*).
( S ,T )

Dac valoarea fluxului determinat n etapa 2 nu este egal cu capacitatea tieturii determinat n etapa 3, atunci algoritmul se
reia cu etapa 2 i se identific noi lanuri de augmentare.

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