Académique Documents
Professionnel Documents
Culture Documents
Graphe G = (E , Γ)
E : ensemble fini des sommets
Γ : ensemble fini de couples ordonnés (i, j) avec i, j ∈ E .
Chapitre 5 : Flot maximal dans un graphe Les éléments de Γ sont appelés les arêtes du graphe
Notation :
J.-F. Scheid i j
Remarque : Les graphes considérés sont tous orientés : les arêtes (i, j) et
(j, i) sont distinctes.
1 3
Plan du chapitre
Exemple de graphe : E = {1, 2, 3, 4}
Γ = {(1, 2), (3, 4), (4, 2), (4, 3)}
I. Définitions
1 Graphe 3
2 Graphe valué
3 Représentation d’un graphe (matrice d’incidence, matrice d’adjacence,
successeurs/prédécesseurs)
4 Flot dans un graphe 1 4
II. Problème de flot maximal dans un graphe
III. Algorithme de Ford-Fulkerson
IV. Flot maximal avec bornes inférieures et supérieures 2
2 4
3) Représentation d’un graphe
5 7
2) Graphe valué
Exemple : E = {1, 2, 3, 4}
Γ = {(1, 2), (2, 3), (3, 1), (2, 4)}
Exemple : La capacité cij représente par exemple la longueur du tronçon de (1,2) (2,3) (3,1) (2,4)
route (i, j), le nombre max. de voitures par unité de temps entre deux villes 1 +1 0 -1 0
i et j, la bande passante maximale entre les serveurs i et j... Matrice d’incidence A = 2 -1 +1 0 +1
3 0 -1 +1 0
4 0 0 0 -1
6 8
b) Matrice d’adjacence sommet-sommet c) Listes d’adjacence : successeurs et prédécesseurs
Matrice booléenne A de taille n × n (n sommets) Pour chaque sommet i du graphe, on définit
1 si l’arête (i, j) existe dans le graphe la liste de ses successeurs S(i) : liste des sommets j tq l’arête (i, j)
aij = existe dans le graphe.
0 sinon
la liste de ses prédécesseurs P(i) : liste des sommets j tq l’arête (j, i)
Variante pour un graphe valué par {cij } : existe dans le graphe.
cij si l’arête (i, j) existe dans le graphe
aij = Un sommet sans prédécesseur est appelé une source.
0 sinon
Un sommet sans successeur est appelé un puits
9 11
Exemple : E = {1, 2, 3, 4}
Exemple : E = {1, 2, 3, 4}
Γ = {(1, 2), (2, 3), (3, 1), (2, 4)}
Γ = {(1, 2), (2, 3), (3, 1), (2, 4)}
1 3
1 3
2 4
2 4
1 2 3 4
sommet successeur S prédécesseur P
1 0 1 0 0
1 2 3
Matrice d’adjacence A = 2 0 0 1 1
2 3, 4 1
3 1 0 0 0
3 1 2
4 0 0 0 0
4 – 2
10 12
4) Flot dans un graphe
Remarque (rappels) :
Problèmes de circulation d’objets (voiture, information ...) dans un réseau S(i) : ensemble des sommets j successeurs du sommet i c-à-d tq
(routier, informatique ...). l’arête (i, j) existe dans le graphe.
Définition
P(i) : ensemble des sommets j prédécesseurs du sommet i c-à-d tq
Soit G = (E , Γ, c) un graphe valué comportant un seul sommet source s et l’arête (j, i) existe dans le graphe.
un seul sommet puits t.
Un flot de s à t est une fonction f : Γ → R tq Une source s (resp. un puits t ) est un sommet ne possédant pas de
X X prédécesseur (resp. de successeur).
def
fij = fjk où fij = f (i, j)
i∈P(j) k∈S(j)
13 15
2) Théorème de Ford-Fulkerson
max [F = v ]
fij ,v
X
fsk − v = 0 (source s)
k∈S(s)
X X
conservation des flux
− fij + fjk = 0, ∀j 6= s, t
en chaque sommet :
i∈P(j) k∈S(j)
X
− fit + v = 0 (puits t)
i∈P(t) L. R. Ford (1927– ) D. R. Fulkerson (1924–1976)
Flot maximal et programmation linéaire II. Problème de flot maximal dans un graphe
Ecriture matricielle (n sommets et m arêtes)
max [F = v ] Définition
f,v
Une coupe d’un graphe valué G = (E , Γ, c) possédant un seul sommet
Af + v = 0 source s et un seul sommet puits t, est une partition des sommets notée
f≤c (X , X ) telle que :
f≥0
E =X ∪X
A est la matrice d’incidence du graphe, de taille n × m,
X ∩X =∅
(fsk )k∈S(s) −v s ∈ X et t ∈ X
.. 0 X
. La capacité de la coupe est définie par c(X , X ) = cij
..
f= f ij
∈ R m
; v = . ∈ Rn i∈X
.. j∈X
. 0
(fit )i∈P(t) +v
18 20
Le théorème de Ford-Fulkerson permet de savoir si un flot est maximal ou
non. Par exemple :
X
X a 2 c X
X 2
10 6 a 2 c
4
s 4 3 10 6 3
t
4 2 1 3
3 s t
4
3 4
b 5 d v(f)=7
3 4
b 5 d
5
Capacité de la coupe c(X , X ) = 10 + 3 + 4 = 17.
v (f ) = 7 et c(X , X ) = 7 ⇒ flot maximal.
21 23
22 24
II. Problème de flot maximal dans un graphe
Proposition
3) Coupe minimale S’il existe une coupe minimale pour un flot f , alors ce flot est maximal.
Le Théorème de Ford-Fulkerson admet un corollaire qui donne une
Preuve. A partir de la formule établie dans le th. de Ford-Fulkerson :
condition suffisante pour avoir un flot maximal.
On dit qu’une arête (i, j) ∈ Γ est saturée si fij = cij et qu’une arête =cij =0
X z}|{ X z}|{
(j, i) ∈ Γ est insaturée si fji = 0 v (f ) = fij − fki = c(X , X )
i∈X i∈X
j∈X k∈X
Définition
Une coupe (X , X ) est dite minimale pour f si toute arête de X vers X est ⇒ v (f ) est maximal.
saturée et toute arête de X vers X est insaturée.
25 27
X X
X X
8
b 12
b 12 e
10 8 5
8 10
8 5
a 2 2 a 6 t
2 2 5
5
9 8 5
c 3 d c 3 d
0 7 0
s 2
arêtes (a, b) et (c, b) saturées
arête (d, c) insaturée ⇒ flot maximal v (f ) = c(X , X ) = 10
26 28
III. Algorithme de Ford-Fulkerson L’algorithme de Ford-Fulkerson permet de trouver un flot maximal par
recherche de chaînes améliorantes. Il est basé sur le résultat suivant :
1) Condition nécessaire et suffisante de flot maximal
Théorème
Un flot réalisable est maximal si et seulement s’il n’existe pas de chaîne
Définition 1.
améliorante.
Une chaîne d’un graphe est une suite de sommets
Preuve.
C = (i1 , i2 , · · · , ip , ip+1 , · · · , iq )
i) Condition nécessaire
reliés entre eux par des arêtes c’est-à-dire tels que Soit f un flot réalisable maximal. On suppose par l’absurde qu’il existe une
chaîne améliorante C = (s, i1 , i2 , · · · , ip , ip+1 , · · · , iq , t). On note
(ip , ip+1 ) ∈ Γ ou (ip+1 , ip ) ∈ Γ
ε1 = min{c(ip , ip+1 ) − f (ip , ip+1 ) tel que (ip , ip+1 ) ∈ Γ (arête directe)}
(arête directe) (arête inverse)
ε2 = min{f (ip+1 , ip ) tel que (ip+1 , ip ) ∈ Γ (arête inverse)}
Une chaîne ne tient pas compte de l’orientation des arêtes reliant les
sommets (chaîne 6= chemin). → ε = min{ε1 , ε2 } > 0
1 c12 2 c32 3 c43 4 ε représente l’amélioration qu’on peut apporter au flot.
29 31
Définition 2.
Soit G = (E , Γ, c) un graphe valué possédant une seule source s et un seul Nouveau flot f 0 qui coïncide avec f en dehors de la chaîne améliorante. Sur
puits t. Une chaîne C = (s, i1 , i2 , · · · , ip , ip+1 , · · · , iq , t) est dite les arêtes de la chaîne :
améliorante pour un flot réalisable f donné si :
Si (ip , ip+1 ) ∈ Γ (arête directe) alors
f (ip , ip+1 ) < c(ip , ip+1 ) si (ip , ip+1 ) ∈ Γ (arête directe)
f (ip+1 , ip ) > 0 si (ip+1 , ip ) ∈ Γ (arête inverse) f 0 (ip , ip+1 ) = f (ip , ip+1 ) + ε
Remarque : ce qui compte ici, ce sont les inégalites strictes. Si (ip+1 , ip ) ∈ Γ (arête inverse) alors
+ε −ε
(0) 1 1 3 2 (3)
ip−1 ip ip+1
s v=5
4 3 3 t (v=6)
2 (3) 3
30 32
ii) Condition suffisante
Le nouveau flot f 0 est bien réalisable. En particulier, il y a On suppose qu’il n’existe pas de chaîne améliorante. On va montrer que le
conservation des flux en chaque sommet : 4 cas possibles flot est maximal en trouvant une coupe (X , X ) telles que v (f ) = c(X , X )
(Th. Ford-Fulkerson).
ip ip
Construction de la coupe (X , X )
+ε −ε
+ε +ε X est l’ensemble des sommets qui sont marqués de la façon suivante :
1 On marque la source s
ip−1 ip+1 ip−1 ip+1
2 A partir de tous les sommets i marqués, marquer tous les sommets j
non encore marqués tels que
ip ip
f (i, j) < c(i, j) (arête directe) ou f (j, i) > 0 (arête inverse)
−ε +ε −ε −ε
3 Recommencer en 2) jusqu’à ce qu’il n’y ait plus de marquage possible.
ip−1 ip+1 ip−1 ip+1
⇒ A l’issue du marquage, on a v (f ) = c(X , X ).
33 35
34 36
III. Algorithme de Ford-Fulkerson III. Algorithme de Ford-Fulkerson
2) Algorithme de Ford-Fulkerson
3) Parcours de graphe
Initialisation par un flot initial réalisable (f = 0) Parcours profondeur (DFS)
Tant que le flot n’est pas maximal
Exploration en profondeur des chemins : pour chaque sommet, on
Marquage de la source s prend et on marque le premier sommet successeur jusqu’à ce qu’un
Tant qu’on marque des sommets sommet n’ait plus de successeur ou bien que tous ses successeurs
Pour tout sommet marqué i soient déjà marqués.
Marquer les sommets j non marqués tq On utilise généralement une pile pour l’exploration des sommets.
f (i, j) < c(i, j) ou f (j, i) > 0
Fin pour Utilisations :
Fin Tant que Pour un graphe non-orienté, calcul des composantes connexes.
Si le puits t n’est pas marqué alors le flot est maximal Pour un graphe orienté sans cycle, tri topologique des sommets : ordre
Sinon amélioration du flot des sommets tel qu’un sommet est toujours visité avant ses successeurs.
En dépilant, on obtient un tri topologique (en ordre inverse).
Fin Tant que
37 39
trouver une chaîne qui a permis de marquer t et calculer A partir d’un sommet, on liste et on marque tous les sommets
ε = min(ε1 , ε2 ) > 0 avec successeurs non encore marqués, jusqu’à ce qu’un sommet n’ait plus
de successeur ou bien que tous ses successeurs soient déjà marqués.
ε1 = min {c(ip , ip+1 ) − f (ip , ip+1 ) avec (ip , ip+1 ) ∈ Γ (arête directe)} On utilise généralement une file (liste FIFO) pour l’exploration des
ε2 = min {f (ip+1 , ip ) avec (ip+1 , ip ) ∈ Γ (arête inverse)} sommets.
38 40
III. Algorithme de Ford-Fulkerson III. Algorithme de Ford-Fulkerson
Algorithme BFS et plus court chemin
Initialement, tous les sommets sont non-marqués et la file est
vide. 4) Un exemple
Marquer et insérer le sommet s de départ dans la file. Remarque pratique :
Initialisation de la distance D(s) = 0.
Dans la pratique, on utilise plusieurs tableaux
Tant que la file n’est pas vide
- Supprimer le sommet P situé en tête de file. E = {sommets marqués mais non complètement examinés}
- Pour chaque successeur non marqué Q de P, tableau orig qui indique l’origine du marquage :
- Marquer et insérer Q dans la file
arête directe (ip , ip+1 ) ∈ Γ → orig (ip+1 ) = ip
- Calcul de la distance de Q à s : D(Q) = D(P) + 1.
Fin Pour arête inverse (ip+1 , ip ) ∈ Γ → orig (ip ) = −ip+1
Fin Tant que tableau ε : amélioration possible du flot à chaque marquage.
1 2
a 3 b
1 2
1 2
Exemple de parcours DFS / BFS 2 2
1 0 1
s t
2 1 v=1
1 1 v=2
c v=3 = max(v)
Marquage pile profondeur (DFS)
Etape 1 : Etape 2 :
E s a b c t E s a b t
orig − s a b c orig − s a b
ε ∞ 2 2 1 ε=1 ε ∞ 1 1 ε=1
Parcours profondeur DFS : A,B,E,F,C,G,D (tri topologique A,D,C,G,B,F,E) Etape 3 :
Parcours largeur BFS : A,B,C,D,E,F,G E s c b a t
orig − s −c −b b
ε ∞ 2 1 1 ε=1
42
on dépile ↑ 44
Etape 4 :
E s c
⇒ pile vide (E = ∅).
orig − s
ε ∞ 1
6) Variante : Algorithme d’Edmonds-Karp (1972).
on dépile ↑ ↑
Le puits t n’est pas marqué ⇒ pas de chaîne améliorante ⇒ flot maximal C’est une implémentation particulière de l’algorithme de Ford-Fulkerson en
parcours largeur (BFS) et qui consiste à toujours choisir une chaine
Coupe minimale : (X , X ) avec X = {s, c} et X = {a, b, t}. améliorante de plus court chemin de s à t, c’est-à-dire celle avec le moins
X est formé des sommets marqués à la dernière étape (pile vide). d’arêtes possibles.
2 Cet algorithme se termine toujours (même pour des capacités non entières,
a 3 b contrairement à Ford-Fulkerson...) avec une complexité en O(nm2 ) (indép.
2 2
2 des capacités).
2
0 1
s t
2 1 max(v)=3
1 1
c
X X
45 47
III. Algorithme de Ford-Fulkerson IV. Flot maximal avec bornes inférieures et supérieures
5) Finitude et complexité 1) Introduction
Capacités à valeurs entières Graphe valué par des capacités inférieures {αij } et supérieures {βij } :
G = (E , Γ, ({αij }, {βij }))
Pour des capacités à valeurs entières, l’algorithme de Ford-Fulkerson
converge en un nombre fini d’opérations. On note :
49 51
IV. Flot maximal avec bornes inférieures et supérieures IV. Flot maximal avec bornes inférieures et supérieures
3) Adaptation de Ford-Fulkerson : flot maximal sur G . Pour assurer la conservation du nouveau flux aux sommets, on introduit un
graphe valué auxiliaire G 0 = (E 0 , Γ0 , c 0 ) :
On suppose qu’on dispose d’un flot initial réalisable sur G (cf. section
On ajoute deux sommets s 0 et t 0 : E 0 = E ∪ {s 0 , t 0 }
suivante). On adapte l’algorithme de Ford-Fulkerson pour la recherche
d’une chaine améliorante. On determine ainsi un flot maximal sur G . On ajoute des arêtes reliant s 0 aux sommets j 6= s et des arêtes reliant
les sommets j 6= t à t 0 :
Γ0 = Γ ∪ {(s 0 , j), ∀j ∈ E , j 6= s} ∪ {(j, t 0 ), ∀j ∈ E , j 6= t}
Pour éviter d’avoir 2 sources s et s 0 et 2 puits t et t 0 , on relie t à s
par un arc de capacité infinie (s et t sont confondus pour G 0 ).
Capacité c 0 :
cij0 = βij − αij , ∀(i, j) ∈ Γ
arête directe arête inverse X
cs0 0 j = αij , ∀j 6= s
condition d’amélioration : fij < βij fij > αij i∈P(j)
X
amélioration possible : ε1 = βij − fij > 0 ε2 = fij −αij > 0 cjt0 0 = αjk , ∀j 6= t
k∈S(j)
50 52
IV. Flot maximal avec bornes inférieures et supérieures IV. Flot maximal avec bornes inférieures et supérieures
s′ c0s0 t t s
Théorème (CNS d’existence d’un flot réalisable sur G )
Soient f : Γ → R et f 0 : Γ0 → R vérifiant (1). Alors,
c0s0 j = +↵ij
1 pour tout j ∈ E , j =
6 s, j =
6 t,
0
fjk = fjk ↵jk X X X X
− fij + fjk = − fij0 + fjk0 (2)
i c0ij j c0jk k i∈P(j) k∈S(j) i∈P 0 (j) k∈S 0 (j)
0
fij = fij ↵ij
où P 0 (j) (resp. S 0 (j)) désigne les prédécesseurs (resp. successeurs)
c0jt0 = +↵jk dans E 0 du sommet j.
2 {fij } est un flot réalisable sur G ⇔ {fij0 } est un flot maximal sur G 0
t′
c0st0
t s
53 55
IV. Flot maximal avec bornes inférieures et supérieures IV. Flot maximal avec bornes inférieures et supérieures
Démonstration
1 Soit j ∈ E , j 6= s, t. Par définition de {fij0 }, on a
Soient f : Γ → R et f 0 : Γ0 → R telles que
X X X X
fij0 = fij − αij , ∀(i, j) ∈ Γ − fij + fjk = − fij0 − αij
X i∈P(j) k∈S(j) i∈P(j) i∈P(j)
fs00 j = cs0 0 j := αij , ∀j ∈ E , j 6= s | {z }
i∈P(j) (1) =fs00 j
X X X
fjt0 0 = cjt0 0 := αjk , ∀j ∈ E , j 6= t + fjk0 + αjk
k∈S(j) k∈S(j) k∈S(j)
| {z }
{fij0 } est tel que toutes les arêtes (s 0 , j) et (i, t 0 ) sont saturés, ∀j 6= s 0 , =fjt0 0
∀i 6= t 0 . X X
= − fij0 + fjk0
i∈P 0 (j) k∈S 0 (j)
54 56
IV. Flot maximal avec bornes inférieures et supérieures IV. Flot maximal avec bornes inférieures et supérieures
IV. Flot maximal avec bornes inférieures et supérieures IV. Flot maximal avec bornes inférieures et supérieures
a) Graphe auxiliaire G 0 :
Pour trouver un flot réalisable pour G , il faut donc déterminer un flot
maximal pour le graphe auxiliaire G 0 . On utilise pour cela l’algorithme de 4
Ford-Fulkerson (dans sa version standard) sur G 0 .
Flot réalisable initial sur le graphe auxiliaire G 0 . a
4
Comme flot initial sur G0
on peut choisir le flot nul f0 ≡ 0 mais on peut 3 s
aussi faire un peu mieux : 33
7
2
s′ s t t′
3
4
fs00 j = fjt0 0 = min(cs0 0 j , cjt0 0 ) pour tout j ∈ E t 2
b 1
fij0 = 0 pour tout (i, j) ∈ Γ
4
58 60
IV. Flot maximal avec bornes inférieures et supérieures IV. Flot maximal avec bornes inférieures et supérieures
b) Flot réalisable initial sur G 0 : d) Flot réalisable sur G :
4
4
a a
4
3 s
3
3
3 3
10
7 3 4 3
6
0 0
2 1
s′ s t t′ s 1 t
0
3
3
0 1 5
4 4
0 1
1
t 2 1 2
b 1 b
1
4
61 63
4
4
4
a
4
3 s
3
3 4
7
1 0
2
s′ s t t′
0
0
3
4 1 1
t 2
b 1
2
4
4 62