Académique Documents
Professionnel Documents
Culture Documents
Curs 9
Continutul cursului
Curs 9
10
1
3 9
7
2
v
4
[s] cu w ([s]) = 0
[s, x, u, v ] cu w ([s, x, u, v ]) = 9
[s, x, y ] cu w ([s, x, y ]) = 7
Curs 9
10
1
3 9
7
2
v
4
[s] cu w ([s]) = 0
[s, x, u, v ] cu w ([s, x, u, v ]) = 9
[s, x, y ] cu w ([s, x, y ]) = 7
Observatie
Problema poate fi rezolvata cu algoritmul lui Warshall:
Calculeaza cele mai usoare cai existente pentru orice pereche
de noduri
Are complexitatea O(|V |3 ) si calculeaza prea mult
Se atribuie
o greutate tentativ
a d(x) pentru calea cea mai usoar
a la fiecare nod x.
un nod precedent (x) fiec
arui nod x pe calea cea mai usoar
a de la s la x.
0
dac
a x = s,
nedef dac
ax =s
(x) =
Initial avem d(x) =
dac
a x 6= s
s
dac
a x 6= s
unde nedef este o valoare special
a care indic
a inexistenta unui nod p
arinte.
Creaz
a o multime Q de noduri nevizitate. Initial, Q := V , si tine evidenta unui
nod curent crt.
Dac
a Q = atunci stop, altfel goto 3.
Curs 9
I Initializare
InitOSursa(G , s)
pentru fiecare v V
d(v ) :=
(v ) := s
d(s) := 0
(s) := null
I Pasul de relaxare a unui arc (u, v )
Relaxeaza(u, v )
Dac
a d(v ) > d(u) + w ((u, v ))
d(v ) := d(u) + v ((u, v ))
(v ) := (u)
u w ((u
d (u )
,v
))
s
d (v )
Curs 9
Dijkstra(G , w , s)
1 InitOSursa(G , s)
2 Q := S
3 while Q 6=
4
u :=ExtractMin(Q)
5
for fiecare vecin v al lui u pentru care v 6 Q
6
Relaxeaza(u, v )
Complexitate temporal
a:
B Algoritmul original: O(|V |2 )
B Algoritmul mbunatatit cu o coada cu prioritate minima:
O(|E | + |V | log |V |)
Curs 9
Convent
ie: Nodurile nemarcate nca (cele din Q) sunt albe;
celelalte sunt cenusii
d:
:s
10
d:0
:nedef
d:
:s
1
3 9
7
v
4
d:
:s
Configuratia produs
a de InitializeSingleSource(G , s):
6
Q = {s, x, y , u, v }
Se selecteaz
a s = ExtractMin(Q)
d:
:s
10
d:0
:nedef
x
d:5
:s
d:
:s
9
7
2
d:10
:s
v
4
10
6
d:0
:nedef
d:
:s
x
d:5
:s
Curs 9
d:
:s
9
7
2
v
4
y
d:
:s
10
d:0
:nedef
3 9
7
10
6
d:0
:nedef
9
7
2
v
4
x
d:5
:s
d:14
:x
d:5
:s
10
d:
:s
d:8
:x
d:8
:x
d:5
:s
d:0
:nedef
d:
:s
1
y
d:7
:x
Curs 9
d:14
:x
1
3 9
7
2
v
4
y
d:
:s
d:8
:x
10
d:0
:nedef
d:14
:x
1
3 9
7
v
4
d:5
:s
d:7
:x
10
d:0
:nedef
x
d:5
:s
d:13
:y
1
3 9
7
2
v
4
y
d:7
:x
Curs 9
d:8
:x
10
d:0
:nedef
d:13
:y
1
3 9
7
v
4
d:5
:s
d:7
:x
10
d:0
:nedef
x
d:5
:s
d:9
:u
1
3 9
7
2
v
4
y
d:7
:x
Curs 9
10
d:0
:nedef
d:9
:u
1
3
x
d:5
:s
9
7
2
v
4
y
d:7
:x
d(s) = 0
d(x) = 5
d(u) = 8
d(y ) = 7
d(v ) = 9
(s) = nedef
(x) = s
(u) = x
(y ) = x
(v ) = u
Se selecteaza si marcheaza v
N-a mai ramas de relaxat nici un arc algoritmul se opreste.
Din valorile lui si d putem extrage caile cele mai usoare:
I la s: [s] cu greutatea w ([s]) = d(s) = 0
I la x: [s, x] cu greutatea w ([s, x]) = d(x) = 5
I la u: [s, x, u] cu greutatea w ([s, x, u]) = d(u) = 8
I la y : [s, x, y ] cu greutatea w ([s, x, y ]) = d(y ) = 7
I la v : [s.x, u, v ] cu greutatea w ([s, x, u, v ]) = d(v ) = 9
Curs 9
x
2
1
v
Observatie
Orice ramura a lui G de la nodul sursa s la un nod x este o cale
cea mai usoara de la s la x.
Curs 9
Referinte
Curs 9
Curs 9
Retele de transport
Model matematic
Curs 9
Fluxuri
Definitie
Un flux n o retea de transport G este o functie f : V V R
care satisface 3 conditii:
Restrictie de capacitate: Pentru toti u, v V , f (u, v ) c(u, v ).
Antisimetrie: pentru toti u, v V , f (u, v ) = f (v , u).
X
Conservarea fluxului: Pentru toti u V {s, t},
f (u, v ) = 0.
v V
f (u, v ) se nume
P ste fluxul net de la nodul u la v . Valoarea fluxului
f este |f | = v V f (s, v ), adica, fluxul total de retea care pleaca
din sursa.
Problema fluxului maxim
Se da o retea de transport G cu sursa s si destinatia t,
Sa se gaseasca un flux cu valoare maxima de la s la t.
Curs 9
Curs 9
13
v2
14
v3
v4
16
11/
20
12/12
v1
v3
15/
20
12
10
8/1
1/4
4/
10
v1
16
v2
(a)
7/7
11/14
v4
4/4
(b)
Curs 9
Retele de transport
S
tergerea tuturor fluxurilor negative de retea regula de anulare
v1 /c1
anulare
x
v2
v2 /c2
constr
angerea de capacitate
antisimetria
conservarea fluxului
Curs 9
Exemplu
s1
10
12
s2
s3
t1
s2
15
6
20
13
t2
s3
18
t3
14
7
s4
s1
11
s4
s5
Curs 9
Exemplu
s1
s2
t1
s2
15
6
20
13
t2
18
t3
s3
11
s5
14
7
s4
s1
5
8
s3
s1
10
12
10
12
s2
s3
s4
Curs 9
t1
s2
20
13
t2
s3
18
t3
11
s5
3
15
6
14
7
s4
s1
s4
Operatii cu fluxuri
Conventii de notatie
Se presupun date:
o retea de transport G = (V , E )
o functie f de la V V la R
multimile de noduri X , Y (adica, X V , Y V )
nodul u V .
Atunci
f (X , Y ) reprezinta suma
XX
f (x, y ).
xX y Y
f (u, x).
xX
f (Y , u) reprezinta suma
f (y , u).
y Y
Remarc
a. Daca f este un flux pentru G = (V , E ) atunci
f (u, V ) = 0 pentru toti u V {s, t}. Acest fapt rezulta din
conservarea fluxului f (V {s, t}, V ) = 0.
Curs 9
Se observa ca:
|f | = f (s, V )
cf. definitiei
= f (V , V ) f (V s, V )
= f (V , V s)
= f (V , t) + f (V , V {s, t})
= f (V , t)
Operatii cu fluxuri
Definitie
Daca f1 , f2 sunt fluxuri n o retea de transport G iar R, atunci
suma fluxurilor f1 si f2 este functia f1 + f2 de la V V la R
definita de
(f1 + f2 )(u, v ) := f1 (u, v ) + f2 (u, v )
pentru toti u, v V .
pentru toti u, v V .
Curs 9
Operatii cu fluxuri
Exemple
v1
12/12
v3
15/
10
8/1
3
1/4
v2
4/
11/14
7/7
v4
1/1
20
4/4
10
6/1
3
(a) G si f1
v1
1/4
v2
2/12
4/
9
16
11/
9/14
v3
7/7
v4
(b) G si f2
Curs 9
5/2
0
2/4
Operatii cu fluxuri
Exemple
12/12
v3
15/
10
8/1
3
1/4
v2
4/
11/14
7/7
v4
1/1
20
10
6/1
3
4/4
(a) G si f1
v1
16
14/12
v3
10
14/
13
1/4
v2
4/
20/14
20/
20
7/7
v4
v1
1/4
v2
2/12
9/14
v3
6/4
(c) G si f1 + f2
Curs 9
5/2
0
7/7
v4
(b) G si f2
12/
4/
9
v1
16
11/
2/4
Operatii cu fluxuri
Exemple
v3
15/
10
8/1
3
1/4
v2
4/
11/14
7/7
v4
1/1
20
10
6/1
3
4/4
(a) G si f1
14/12
v3
10
14/
13
1/4
v2
4/
20/14
20/
(c) G si f1 + f2
.5/
20
7/7
v4
v2
v3
5/2
0
7/7
9/14
v4
2/4
6/4
16
v1
1/12
v3
2.5
/20
v1
16
1/4
2/12
(b) G si f2
12/
v1
4/
9
12/12
5 .5/4
3/1
v2
2/
v1
16
11/
3.5/7
4.5/14
v4
1/4
(d) G si f2 cand =
Curs 9
1
2
Operatii cu fluxuri
Intreb
ari
Curs 9
Retele reziduale
Ipoteze: G = (V , E ): retea de transport; f : flux n G .
capacitatea reziduala a unei muchii (u, v ) este
cf (u, v ) := c(u, v ) f (u, v ).
retea reziduala a lui G indusa de f este reteaua de transport
Gf = (V , Ef ) unde Ef = {(u, v ) V V | cf (u, v ) > 0}, iar
capacitatea fiecarei muchii (u, v ) este cf (u, v ).
Exemplu
v3
15/
10
8/1
3
1/4
v2
4/
11/14
7/7
v4
11
4/4
12
v1
20
11
Curs 9
v2
(b) Gf
Remarc
a. In general, |Ef | 2 |E |.
15
11
(a) G si f
v3
12/12
v1
16
11/
v4
(f + f )(u, v ) =
v V
(f (u, v ) + f (u, v ))
v V
f (u, v ) +
v V
X 0
f (u, v ) = 0 + 0 = 0.
v V
In final avem ca
0
|f + f | =
X
v V
(f + f )(s, v ) =
(f (s, v ) + f (s, v )) =
v V
X
v V
Curs 9
f (s, v ) +
X 0
0
f (s, v ) = |f | + |f |.
v V
Drumuri de crestere
Un drum de crestere al unei retele de transport G si a unui flux f
este o cale simpla de la s la t n reteaua reziduala Gf .
Exemplu (Drum de crestere)
v3
4
11
15
11
12
v1
v2
v4
11
Observat
ii.
Fiecare muchie (u, v ) a unui drum de crestere admite un flux
net pozitiv suplimentar fara ca sa violeze capacitatea muchiei.
In acest exemplu am fi putut trimite cel putin 4 unitati n plus
de la s la t de-a lungul drumului de crestere marcat, fara a
viola vreo restrictie de capacitate (Remarca: capacitatea
reziduala minima pe drumul de crestere marcat este 4).
Curs 9
0 n celelalte cazuri.
Atunci fp este un flux n Gf cu valoarea |fp | = cf (p) > 0.
Corolar
Fie G = (V , E ) o retea de transport cu fluxul f , si p un drum de
crestere n Gf . Fie fp fluxul definit ca n lema precedenta. Atunci
f + fp este un flux n G cu valoarea |f 0 | = |f | + |fp | > |f |.
Curs 9
Metoda Ford-Fulkerson
Produce un flux maxim pentru o retea de transport G :
Ford-Fulkerson-Method(G , s, t)
1 initializeaza fluxul f cu 0
2 while exista un drum de crestere p
3
creste fluxul f de-a lungul lui p
4 return f
Metoda Ford-Fulkerson este corecta deoarece are loc
urmatorul rezultat:
Un flux este maxim dac
a si numai dac
a reteaua lui
rezidual
a nu contine drumuri de crestere.
Curs 9
Metoda Ford-Fulkerson
Produce un flux maxim pentru o retea de transport G :
Ford-Fulkerson-Method(G , s, t)
1 initializeaza fluxul f cu 0
2 while exista un drum de crestere p
3
creste fluxul f de-a lungul lui p
4 return f
Metoda Ford-Fulkerson este corecta deoarece are loc
urmatorul rezultat:
Un flux este maxim dac
a si numai dac
a reteaua lui
rezidual
a nu contine drumuri de crestere.
Curs 9
Taieturi
Definitie
O taietura (S, T ) a unei retele de transport G = (V , E ) este o
partitie a lui V n S si T = V S astfel ncat s S si t T .
Fluxul net de-a lungul taieturii (S, T ) este f (S, T ). Capacitatea
taieturii (S, T ) este c(S, T ).
Exemplu
16
v1
12/12
v3
10
8/1
1/4
v2
4/
11/14
20
7/7
v4
S = {s, v1 , v2 }
T = {v3 , v4 , t}
15/
11/
4/4
S T
Curs 9
Ford-Fulkerson(G , s, t)
1 for fiecare muchie (u, v ) a lui G
2
f (u, v ) := 0
3
f (v , u) := 0
4 while drum p de la s la t n Gf
5
cf := min{cf (u, v ) | (u, v ) este n p}
6
for fiecare muchie (u, v ) n p
7
f (u, v ) := f (u, v ) + cf (p)
8
f (v , u) := f (u, v )
Curs 9
v2
4
10 4
s
13
11
13
v3
v4
v1
8
4
v3
11
v2
5 7
3
11
v4
v2
6
1
11/
v1
7/10 4
13
v1
10 4
13
20
5 7
v2
v4
10
4
6
4/1
20
(c)
14
v1
12
(b)
10 4
13
v3
(a)
12
v2
4/12
v3
4/
9
v1
16
20
v4
4/14
4/12
4/
9
Retea reziduala Gf cu
drum de crestere (linia 4)
v3
4/4
7/2
7/7
11/14
v4
4/4
13
7
...
...
...
Curs 9
Curs 9
Curs 9
Curs 9
Analiza complexitatii
0
000
100
000
0
999
100
v
(a)
000
100
999
100
000
0
100
000
100
000
999
999
(b)
999
999
1
1
99 9
999
999
999
1
1
999
999
1
(c)
Curs 9
Analiza complexitatii
0
000
100
000
0
999
100
v
(a)
000
100
999
100
000
0
100
000
100
000
999
999
(b)
999
999
1
1
99 9
999
999
999
1
1
999
999
1
(c)
Aplicatii si extensii
Aplicatia 1: Cuplaje n grafuri bipartite
Aplicatii si extensii
Aplicatia 1: Cuplaje n grafuri bipartite
Curs 9
Aplicatii si extensii
Aplicatia 1: Cuplaje n grafuri bipartite
x3
t
y2
x2
y1
x1
Curs 9
Aplicatii si extensii
Aplicatia 1: Cuplaje n grafuri bipartite
x3
t
y2
x2
y1
x1
Curs 9
Aplicatii si extensii
Aplicatia 1: Cuplaje n grafuri bipartite
x3
t
y2
x2
y1
x1
Aplicatii si extensii
Aplicatia 2: Flux maxim de cost minim
Problema
G = (V , E ): retea de transport n care muchiile (u, v ) au asociate,
pe langa o capacitate, si un cost unitar cost(u, v ) 0.
Un flux maxim de cost minim n G este un flux maxim f n G
pentru care suma
X
f (u, v ) cost(u, v )
(u,v )E
este minima.
Curs 9
Aplicatii si extensii
Aplicatia 2: Flux maxim de cost minim
Bibliografie
Capitolul 27 din
T. H. Cormen, C. E. Leiserson, R. L. Rivest. Introduction to
Algorithms. MIT Press, 2000.
Curs 9