Vous êtes sur la page 1sur 9

Rseaux de flots

Rseaux de flots Problme du flot maximum

188 / 222

189 / 222

Applications
Applications directes: information / rseaux de communication parties / chaines dassemblage courent lectrique / rseaux lectrique liquide / tuyaux ... Applications indirectes (prochaine fois): trafic arien, segmentation dimages,
190 / 222

Plan du cours
Dfinitions Exemples Graphe rsiduel / chaine augmentante Algorithme de Ford-Fulkerson Coupe dun reseau Thorme de la coupe et du flot (MaxFlow-MinCut)

191 / 222

Dfinition
Un rseau de flots est un graphe orient G=(X,E) pour lequel
chaque arc (x,y) de E a une capacit associ c(x,y), t.q. c(x,y) 0 on distingue 2 sommets, la source (s) et le puits (p)

Exemple
u 20 s 10 v 30 10 p

20

192 / 222

193 / 222

On suppose
Si (x,y) est un arc dans E alors (y,x) nest pas un arc (pas darcs antiparallles). Si (x,y) nest pas un arc, sa capacit sera 0 Pas darc de type (x,x) Pour chaque sommet x dans G, il existe un chemin s ~~> x ~~> t
donc graphe connexe et |E| |X| - 1

Flots dans un rseau


Attribuer chaque arc e un flux f(e) t.q.
1. 0 <= f(e) <= c(e) 2. conservation de flot (les sommets ne collecte pas du flot)
lexception de la source s et du puits p: flot total entrant dans un sommet u gal au flot total sortant de u:

f (v, u) = f (u, v)
v X v X
194 / 222 195 / 222

Valeur dun flot flot maximum


Val(f): Flot total quittant s moins flot entrant en s

Valeur de ce flot?
a
20 5 20 20

d
5

20 5

g
10 5

f (s, v) f (u, s)
v X u X

5 5

20

Flot total entrant en p moins flot total quittant p

20

e
5

20

h
5

30

f ( x, p ) f ( p , u )
u X

20

10

v X

20

20

Flot maximum dans un rseau: trouver le flot de valeur maximale.


196 / 222

20

20

197 / 222

Flot maximum?
a
20 5 30 20

Parenthse 1
d
5 20 5 5 20

g
20

Arcs antiparallles: transformer un graphe G pour quil na pas darcs antiparallles


u 20
30

5 5

u 10 30 p 20 30 s 10 v 30 10 p

20

e
5

20

h
5

p s
25

10

20

10

20

10
10

20 v

10 v

20

20

198 / 222

199 / 222

Parenthse 2
Plusieurs sources / puits: transformer dans rseau ayant une seule source, un seul puits. La mthode Ford-Fulkerson
s1
20

d
5

20 5

p1

20

s2

20

e
5

20

p2
5

s3
20

20

20

p3
200 / 222 201 / 222

Lintuition
Etant donn le flot actuel (au dbut flot 0 partout)
trouver une chaine augmentante (chaine reliant s p sur laquelle les flux peuvent encore tre augments sans dpasser les capacits)

Flot et son graphe rsiduel


Etant donn un rseau G et un flot f dans G, le graphe rsiduel Gf indique comment on peut modifier f.
u 15/20 s 15/30 0/10 p 5 15 s 5 5/10 v 20/20 5 v 20 15 15 p u 10

La cl: comment trouver une telle chaine?

202 / 222

203 / 222

Flot et son graphe rsiduel


Etant donns G=(X,E) et un flot f dans G, le graphe rsiduel de f pour G (not Gf) est un rseau ayant capacits dfinies comme suit: 1. cf(u,v) = c(u,v) f(u,v) si (u,v) dans E 2. cf(u,v) = f(v,u) si (v,u) dans E 3. cf(u,v) = 0 sinon un seul cas peut sappliquer!
204 / 222

Flot et son graphe rsiduel


u 15/20 s 5/10 v 15/30 0/10 p 5 15 s 5 20/20 5 v 20 15 15 p u 10

Gf peut avoir des arcs antiparallles, mais pour le reste la dfinition de flot sapplique aux rseaux rsiduels aussi.
205 / 222

Construire le graphe rsiduel


d
2/4 3/5

Augmentation dun flot


Etant donn f un flot dans G, f un flot dans Gf, par f + f on dsigne le flot dfinie pour chaque (u,v) dans E par f(u,v) + f(u,v) f(v,u) val(f+f) = val(f) + val(f)

g
3/3 1/1

s
3/3

1/5

1/5

p
2/5

e
1/1 Graphe rsiduel:

d s e

g p h
206 / 222

Prouver que f + f est un flot?


Condition 1 de la dfinition? Condition 2 de la dfinition?

207 / 222

Flot et son graphe rsiduel


u 15/20 s 5/10 v 15/30 0/10 p 5 15 s 5 20/20 5 v 20 15 15 p u 10

Chaine augmentante
Une chaine L reliant s p dans le graphe rsiduel: sommets v1,v2, ,vk
v1 = s, vk = p capacit rsiduelle cf(L) de p:
min{cf(u,v): (u,v) dans p} possible dajouter cf(L) units de flot entre vj et vj+1 pour j = 1 k-1

Gf peut avoir des arcs antiparallles, mais pour le reste la dfinition de flot sapplique aux rseaux rsiduels aussi.
208 / 222

209 / 222

Example
Flot: Graphe rsiduel:

Trouver deux chaine augmentantes


u 10 15 p s 5 5 u 5 15 s 5 5 v 20
210 / 222 211 / 222

u 15/20 0/10 15/30 5 15

2/5 2/2 0/1

s 5/10 v

15

p 20

2/4 3/3

3/4

3/4 3/3 3/3

20/20

v 10

1/3 3/3 3/3 2/2 2/2

1/3

1/3 1/3 1/3

Chaine augmentante L: capacit rsiduelle 5

15

15

Lemma des chaines augmentantes


Soit L = v1, v2, , vk une chaine augmentante dans Gf, de capacit c=cf(L). la fonction fL dfinie comme suit est un flot dans Gf :
fL(u,v) = c si (u,v) dans L, fL(u,v) = 0

Mthode de Ford-Fulkerson (1956)


f initialis 0 fin = false while fin = false
1. construire Gf 2. fin = true 3. trouver s~~>p chaine L dans Gf ayant capacit cf(L) > 0
1. fin = false 2. ajouter au flot f les cf(L) units le long de L

alors c units de flot peuvent tre ajouter f le long du la chaine L dans le rseau G.
u 15/20 s 5/10 v 15/30 0/10 p s 5 5 20/20 v
212 / 222

u 5 15 15 15 p 20 10

213 / 222

Complexit?
Pour capacits relles la mthode ne converge pas forcement (ne termine pas)! Pour capacits entires (rationnelles aussi )?

Exemple
Combien ditrations au pire des cas? u 1000 1 1000 L

Si flot maximale fm , on va excuter la boucle while val(fm) fois au pire des cas. Trouver la chaine? O(V+E) : BFS ou DFS Donc O(val(fm)E)

s 1000 v

1000

214 / 222

215 / 222

Algorithme de Edmonds-Karp
f initialis 0 fin = false while fin = false
1. 2. 3. construire Gf fin = true trouver s~~>p par une recherche en largeur chaine L dans Gf ayant capacit cf(L) > 0
1. 2. fin = false ajouter au flot f les cf(L) units le long de L

Coupe dans un graphe


Coupe: Partition de X dans 2 ensembles disjoints S, P avec s dans S and p dans P. cap(S,P): somme des capacits des arcs de S vers P flot(S,P): flot sortant de S
Flot sortant de S moins flot entrant de S

Remarque: L sera chaque fois la chaine la plus courte! Complexit: O(VE2) voir la prochaine fois.

f(S,P) f(P,S) flot(S,P) <= cap(S,P)


217 / 222

216 / 222

cap(S,P), flot(S,P) ?
S={s, a, b, e, h},
a
20/20 5/5 5/5 25/30 20/20 0/5 0/5 0/20 20/20

Flots et coupes
g
0/5 20/20

P = {c, f, i, d, g, p}
d
20/20 0/5

Si f est un flot dans G, pout tout coupe (S,P) dans G, on a val(f) = f(S,P) f(P,S) Preuve?

e
0/5

20/20 15/20

h
5/5

30/30

20/20

0/5

0/10

15/25

20/20

10/10

218 / 222

219 / 222

Coupe minimale dans un graphe


La coupe ayant la capacit minimum.
u 40 s 10 v 10 10

Trouver la coupe minimale

6 6

t
10

8 3 2 5 3 5 4

5 6

40

t
4 8

220 / 222

221 / 222

Theorem MaxFlow MinCut


f est le flot maximum ssi Gf na pas de chaine augmentante la valeur du flot maximum f est gale la capacit de la coupe minimale. Remarque 1: Ford-Fulkerson (et Edmonds Karp) sarrtent quand Gf nest plus connect, donc ces algorithmes trouvent le flot maximum Remarque 2: Si on veut connatre la coupe minimale, on commence en cherchant le flot maximum (ides?).
222 / 222

Vous aimerez peut-être aussi