Sei sulla pagina 1di 20

ALGORITMUL

FORD – FULKERSON
DE ETICHETARE
• Algoritmul FORD – FULKERSON
DE ETICHETARE rezolvă o
problemă de flux maxim.

• Constă în identificarea succesivă a


unor drumuri de mărire până în
momentul în care acestea nu mai
există.
f(x,y), c(x,y)
x y

f(x,y): fluxul
c(x,y): capacitatea (cantitatea maximă care poate
traversa arcul)
f(x,y) ≤ c(x,y)

r(x,y)
x y

r(x,y): capacitatea reziduală


• Conceptul de REȚEA REZIDUALĂ joacă un
rol important în implementarea
algoritmilor de flux maxim.
• Dat fiind un flux f, capacitatea reziduală
r(x,y) a oricărui arc (x,y) din A este fluxul
adițional maxim care poate fi trimis de la
nodul x la nodul y utilizând arcele (x,y) și
(y,x).

r(x,y) = c(x,y) – f(x,y) + f(y,x)


Reteaua G=(N, A, f, c, s=1, t=5)

2
0,9 1,16
2,12 1,16 2,2

1,1 1,3
1 4 5

1,16 2,3 0,9


3

SLIDE 20
ALGORITMUL
(1) PROGRAM FFE;
(2) BEGIN
(3) f := f0;
~
(4) se construieste G(f);
~
(5) p(t) := s;
(6) WHILE p(t)~ = 0 DO
(7) BEGIN
~
(8) FOR y E N DO p(y) ~
:= 0;
(9) V~ := {s}; p(s)
~
:= t;
(10) WHILE V~ = O si p(t)
~ = 0 DO
(11) BEGIN
(12) se extrage un nod x din V~ ;
(13) FOR (x, y) din A DO
~
(14) IF p(y) =0
~
(15) THEN BEGIN p(y) := x; V := V~ U {y}; END;
~

(16) END;
~
(17) IF p(t) 6= 0
(18) THEN MARIRE
(19) END;
(20) END.
Procedura Mărire
(1) PROCEDURA MARIRE;
(2) BEGIN
~ ~
(3) se determina DMF D cu vectorul predecesor p;
~ ~
(4) se determina
~
r(D ) = min{r(x, y) | (x, y) E D };
~
(5) se efectueaza marirea de flux de-a lungul lui D;
~
(6) se actualizeaza G(f);
(7) END;
sursa = nodul 1
stoc = nodul 5

2
0,9 1,16
2,12 1,16 2,2

1,1 1,3
1 4 5

1,16 2,3 0,9


3

2
9
r(1,2) = 9-0+0 = 9 ;
r(1,3) = 16-1+0 = 15; 1 0
r(1,4) = 0-0+1 = 1;
r(2,1) = 0-0+0 = 0;
etc
Rezulta graful:

2
15
9
11 17 2 1

1 1 4 1
5
15 1 2
2
1
9
3
ITERATIA 1

V = {1}; p = (5, 1, 1, 1, 2);


p = (0, 0, 0, 0, 1);
D = { ... , 5}
x = 1; D = { ... , 2, 5}
1 -> 2 | 3 | 4 D = {1, 2, 5}
p = (5, 1, 1, 1, 0);
V = {1, 2, 3, 4}; r = min{9, 15} = 9;

x = 2;
2 -> 3 | 4 | 5
p = (5, 1, 1, 1, 2);
V = {1, 2, 3, 4, 5};
15
9
2
1 5
1

r=9

9 15 – 9 = 6
2
1 5
1 + 9 = 10
2
6
9
11 17 2 10

1 1
1 4 5
15 1 2

1 2
9
3
ITERATIA 2

V = {1} ; p = (5, 0, 1, 1, 3);


p = (5, 0, 0, 0, 0); D = {1, 3, 5};

x = 1; r = min(15, 9) = 9;
1 -> 3 | 4
p = {5, 0, 1, 1, 0};
V = {1, 3, 4};

x = 3;
3 -> 1 | 2 | 4 | 5
V = {1, 3, 4, 5};
2
6
9
11 17 2 10

1 1
1 4 5
6 1 2

10 2
9
3
ITERATIA 3

V = {1}; p = (5, 3, 1, 1, 2);


x = 1; D = {1, 3, 2, 5};
1 -> 3 | 4;
p = (5, 0, 1, 1, 0); r = min{6, 17, 6} = 6;
V = {1, 3, 4};

x = 3;
3 -> 2;
p = (5, 3, 1, 1, 0);
V = {1, 2, 3, 4};

x = 2;
2 -> 5;
V = {1, 2, 3, 4 ,5};
2
9 16
17 11 2

1 1
1 4 5
1 2

16 2
9
3
ITERATIA 4

V = {1}; p = (5, 0, 0, 1, 4);


x = 1; D = {1, 4, 5};
1 -> 4 r = min {1, 1} = 1;
V = {1, 4};
p = (5, 0, 0, 1, 0);

x = 4;
4 -> 3 | 5;
V = {1, 4, 5};
2
16
9
17 11 2

1 3
1 4 5
1

16 2
9
3

f(x,y) = max{0, c(x,y) – f(x,y)}

f(1,2) = max(0, 9-0) = 9


f(1,3) = max(0, 16-0) = 16 SLIDE 5
f(2,3) = max(0, 12-17) = 0
etc
Rezulta graful:

2
16
9
2

1 5 4 5

16 2
9
3

Potrebbero piacerti anche