Théorie Des Graphes UIPA 2020 PDF
Théorie Des Graphes UIPA 2020 PDF
Théorie Des Graphes UIPA 2020 PDF
16 janvier 2020
2 Chemins optimaux 14
2.1 Position du problème de cheminement . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.1 Plus court chemin et distance . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.2 Condition d’optimalité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Quelques algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.1 Cas où les longueurs sont positives . . . . . . . . . . . . . . . . . . . . . . 15
2.2.2 Cas où les longueurs sont quelconques . . . . . . . . . . . . . . . . . . . . 17
2.2.3 Cas d’un graphe sans circuit . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Problèmes d’ordonnancement 20
3.1 Méthode MPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.1 Principe de la représentation du réseau MPM . . . . . . . . . . . . . . . . 21
3.1.2 Construction du réseau MPM . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.3 Détermination des dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.4 Les marges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 Méthode PERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.1 Principe de la représentation du graphe PERT . . . . . . . . . . . . . . . 22
3.2.2 Construction du graphe PERT . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.3 Détermination des dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.4 Les marges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4 Problèmes de flots 27
4.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2 Flot complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.2 Algorithme de recherche d’un flot complet . . . . . . . . . . . . . . . . . . 30
4.2.3 Variante pour déterminer un flot complet . . . . . . . . . . . . . . . . . . 30
4.3 Algorithme de Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3.1 Prcocédure de détection d’une chaine améliorante . . . . . . . . . . . . . . 35
4.3.2 Prcocédure de modification d’un flot relativement à une chaine améliorante 36
4.3.3 Algorithme de Ford et Fulkerson . . . . . . . . . . . . . . . . . . . . . . . 36
Chapitre 1
Définition 1.1.3 Dans un graphe orienté, un arc dont les deux extrémités coı̈ncident est appelé
une boucle.
Graphiquement, les sommets sont représentés par des points ou des cercles et un arc u =
(x, y) est représenté par une flèche joignant les sommets x et y, la flèche étant pointée sur y. On
parle alors de représentation sagittale du graphe.
Exemple 1.1.1
Soit G = (X, U ) le graphe orienté défini par : X = {x, y, z} et U = {a, b, c, d, e} où a = (x, z),
b = (z, x), c = (x, y), d = (z, y) et e = (y, y).
z
d
e
a b y
Définition 1.1.4 Etant donné G = (X, U ) un graphe orienté, si u = (x, y) est un arc, alors les
sommets x et y sont dits adjacents ou voisins. En outre le sommet x est dit origine de u et y
extrémité de u. On dit aussi parfois que x est l’extrémité initiale et y l’extrémité terminale de
u.
Définition 1.1.5 Etant donné G = (X, U ) un graphe orienté et x, y deux sommets de G, on
dit que x est un précédent ou un prédécesseur de y, s’il existe un arc de la forme u = (x, y).
Dans ce cas y est un suivant ou un successeur de x. Aussi l’arc u est dit incident à x et y. Plus
précisément il est dit sortant en x ou incident extérieurement à x, et rentrant en y ou incident
intérieurement à y.
Définition 1.1.6 Un sommet qui n’est adjacent à aucun sommet est dit isolé.
Un graphe dont les sommets sont isolés est dit discret.
Définition 1.1.7 Deux arcs sont adjacents s’ils ont une extrémité en commun.
Proposition 1.1.2 La somme des degrés des sommets de G est égale à deux fois la taille de G.
Preuve : Il suffit de remarquer que dans la somme des degrés chaque arc est compté deux
fois : une fois dans le demi-degré extérieur et une autre fois dans le demi-degré intérieur.
Corollaire 1.1.1 Dans un graphe orienté, le nombre de sommets de degrés impairs est pair.
On appelle sous-graphe engendré par Y , le graphe noté GY dont les sommets sont les
éléments de Y et dont les arcs sont les arcs de G ayant leurs deux extrémités dans Y . On
a : GY = (Y, U ∩ (Y × Y )).
On appelle graphe partiel engendré par V , le graphe noté G[V ] ayant le même ensemble X
de sommets que G et dont les arcs sont ceux de V . On a : G[V ] = (X, V ).
Exemple 1.1.2
4 5
2 3
1
Le sous-graphe engendré par Y = {2, 3, 4, 5} est
4 5
2 3
Le graphe partiel engendré par V = U − {(2, 5), (3, 4)} est :
6
4 5
2 3
1
Le sous-graphe partiel engendré par Y et V est :
4 5
2 3
Exemple 1.1.3
u3
x2 x4
u1 u8
x1 u4 u5 u9 u7 x6
u2 u10
u6
x3 x5
Définition 1.1.10 Etant donné un graphe orienté G = (X, U ), un sommet y est dit descendant
de x, s’il existe un chemin de x à y. dans ce cas , x est un ascendant de y.
Proposition 1.1.5 Tout circuit simple est union disjointe de circuits élémentaires.
On parle de chemin pré-hamiltonien s’il passe au moins une fois par chaque sommet du
graphe.
On parle de chemin pré-eulérien s’il passe au moins une fois par chaque arc du graphe.
Chaı̂ne, cycle
Une Chaı̂ne de longueur k est une suite µ = a1 , a2 , . . . ak de k arcs telle que deux arcs
consécutifs sont adjacents. On notera µ = x0 a1 x1 . . . xk−1 ak xk , si l’on veut préciser les sommets
rencontrés. Les sommets x0 et xk sont appelés les extrémités de la chaı̂ne µ. On dit que la chaı̂ne
µ rélie les sommets x0 et xk .
Une chaı̂ne peut être ”vue” comme une suite de sommets telle que deux sommets consécutifs
soient liés par un arc, certains arcs peuvent être parcourus dans le sens de la chaı̂ne (sens +),
les autres arcs dans le sens opposé (sens -).
Une chaı̂ne élémentaire est une chaı̂ne telle qu’en la parcourant, on ne rencontre pas deux
fois le même sommet.
Une chaı̂ne simple est une chaı̂ne dont la sequence d’arcs ne contient pas plusieurs fois un
même élément.
Proposition 1.1.8 Tout cycle simple est union disjointe de cycles élémentaires.
On parle de chaı̂ne pré-hamiltonienne si elle passe au moins une fois par chaque sommet du
graphe.
Définition 1.1.15 Soit G = (X, U ) un graphe orienté. On dit que G est connexe si, pour tout
couple de sommets (x, y), il existe une chaı̂ne reliant x et y.
Définition 1.1.16 Un point d’articulation (resp. ensemble d’articulation) d’un graphe est un
sommet (resp. un ensemble de sommets) dont la suppression augmente le nombre de composantes
connexes.
Un isthme est un arc dont la suppression a le même effet.
Définition 1.1.17 Soit G = (X, U ) un graphe orienté. On dit que G est fortement connexe si,
pour tout couple de sommets (x, y), il existe un chemin allant de x à y.
On associe à cette notion de forte connexité une relation d’équivalence T définie par :
(
soit x = y,
xT y ⇔
soit il existe un chemin allant de x à y et un chemin allant de y à x.
Les classes d’équivalence induites sur X par cette relation forment une partition de X en :
X1 , . . . , Xq . Le nombre q de classes distinctes est appelé le nombre de forte connexité du graphe.
Les sous graphes G1 , . . . , Gq engendrés par les sous ensembles X1 , . . . , Xq sont appelés les
composantes fortement connexes du graphe G. Chaque composante fortement connexe est un
graphe fortement connexe. Le graphe G est fortement connexe s’il n’a qu’une seule composante
fortement connexe.
Exemple 1.1.4
x1 x3 x2
x5 x8
x7
x4
x6
x1 x5 x7 x8
x6 x4
1.2.1 Définitions
Définition 1.2.1 Un graphe non orienté G est défini par la donnée d’un ensemble fini X dont
les éléments sont appelés des sommets ou noeuds et d’un ensemble E dont les éléments sont des
sous-ensembles à 1 ou 2 éléments de X appelés arêtes. On le note G = (X, E). Le nombre n de
sommets de G est appelé l’ordre de G et le nombre m des arêtes de G est appelée la taille de G.
Les arêtes de la forme u = {x} ∈ E sont appelées boucles.
Exemple 1.2.1
Soit G = (X, E) le graphe défini par : S = {x, y, z} et E = {a, b, c, d} où b = {z, x}, c = {x, y}
et d = {z, y}.
d
b y
Définition 1.2.2 Etant donnée une arête u = {x, y} d’un graphe non orienté G = (X, E), on
dit que les sommets x et y sont les extrémités de u. On dit également que les sommets x et y
sont adjacents et que l’arête u est incidente à x et y. On appelle voisinage de x, l’ensemble des
sommets adjacents à x. On le note V(x).
Un sommet qui n’est adjacent à aucun autre sommet est dit isolé.
Définition 1.2.3 Un graphe non orienté G est dit simple s’il est sans boucle.
Définition 1.2.4 Un graphe non orienté G est dit discret si sa taille est nulle. C’est-à-dire tous
ses sommets sont isolés.
Définition 1.2.5 Un graphe non orienté G est dit complet si deux sommets quelconques sont
adjacents.
Définition 1.2.6 Deux arêtes sont adjacentes si elles sont incidentes à au moins une extrémité
commune.
Le degré du sommet x, noté dG (x) ou plus simplement d(x) est le nombre d’arêtes ayant x pour
extréminté.
Définition 1.2.7 Etant donné Y ⊂ X, on appelle cocycle de G l’ensemble w(Y ) des arêtes
ayant une extrémité dans Y et l’autre extrémité dans X − Y .
Proposition 1.2.1 Soit G = (X, E) un graphe non orienté simple d’ordre n et de taille m.
Alors on a m ≤ n(n−1)
2 .
Proposition 1.2.2 Soit G = (X, E) un graphe non orienté simple d’ordre n et de taille m.
Alors G est complet si et seulement si m = n(n−1)
2 .
Proposition 1.2.3 Soit G = (X, E) un graphe non orienté simple d’ordre n et de taille m.
Alors il existe au moins deux sommets ayant même degré.
Une chaı̂ne élémentaire est une chaı̂ne telle qu’en la parcourant, on ne rencontre pas deux
fois le même sommet.
Une chaı̂ne est simple si la séquence d’arêtes qui la constitue ne comporte pas plusieurs fois
le même élément.
La proposition 1.1.7 est valable pour les chaı̂nes.
Un cycle élémentaire est un cycle minimal pour l’inclusion i.e ne contenant strictement aucun
autre cycle.
Les notions de demi-degré, chemin, connexité forte et circuit sont essentiellement orientées.
Elles n’ont donc pas de correspondant dans l’univers des graphes non orientés. Par contre celle
d’isomorphie, de connexité de sous-graphe et graphes partiel s’étendent de manière directe au
cas des graphes non orientés.
1.3 Autres représentations des graphes
1.3.1 Cas des graphes orientés
Définition 1.3.1 (Matrice d’incidence (sommets-arcs)) Soit G = (X, U ) un graphe orienté
tel que X = {x1 , · · · , xn } et U = {u1 , · · · , um }. La matrice d’incidence sommets-arcs de G est
la n × m matrice A = (aij ) à coefficients entiers : 0, -1 et 1 telle que
1
si xi est origine de l’arc uj
aij = −1 si xi est extrémité de l’arc uj
0 dans les autres cas
Exemple 1.3.1
a
1 2
b
c
d
4 3
e
On obtient la matrice d’incidence :
1 0 0 1 0
−1 1 1 0 0
0 0 −1 −1 1
0 −1 0 0 −1
Définition 1.3.3 Soit G un graphe orienté. On appelle dictionnaire des précédents (resp. sui-
vants), le tableau à simple entrée qui à tout sommet x énumère les précédents P (x) (resp. les
suivants S(x)) de x.
Chemins optimaux
Proposition 2.1.1 Soient s et t deux sommets de G. Pour qu’il existe un plus court chemin
allant de s à t il faut et il suffit que tout chemin allant de s à t ne contienne pas de circuit
absorbant.
Algorithme de Dijkstra
Principe
On cherche un plus court chemin d’un sommet initial x1 à tous les autres sommets dans un
graphe valué par des pondérations positives.
A chaque itération de l’algorithme de Dijkstra, on dispose d’un ensemble X ′ contenant les
sommets pour lesquels on a déterminé la distance du plus court chemin issu de x1 . Au debut,
X ′ ne contient que x1 . Chaque sommet x de X possède un paramètre λ(x) défini comme suit :
- si x ∈ X ′ , λ(x) est égal à la plus courte distance de x1 à x.
- si x ∈/ X ′ , λ(x) est égal à la longueur d’un plus court chemin dont tous les sommets
appartiennent à X ′ sauf son extrémité x.
Une itération consiste à faire renter dans X ′ le sommet x∗ appartenant X \ X ′ qui vérifie :
λ(x∗ ) = min[λ(x) : x ∈ X \ X ′ ]
puis mettre à jour les paramètres des successeurs de x∗ qui ne sont pas dans X ′ . On s’arrête dès
que tous les sommets sont dans X ′ .
Algorithme
1. Initialisation
S = {x2 , x3 , . . . , xn }, X ′ = {x1 }
λ(x1 ) = 0
λ(xi ) = l(x1 , xi ) si xi est un successeur de x1 sinon λ(xi ) = +∞
2. Sélection d’un sommet
Sélectionner xi ∈ S tel que λ(xi )S= minxk ∈S (λ(xk ))
Faire S ← S \ {xi }, X ′ ← X ′ {xi }
Si S est vide FIN
Sinon aller en 3
3. Calcul des valeurs de λ
Faire pour tout xj à la fois dans S(xi ) et dans S
λ(xj ) ← min(λ(xj ), λ(xi ) + l(xi , xj ))
et retourner en 2
L’algorithme considère les sommets dans un ordre qui dépend des valeurs des paramètres λ(xi )
appelées aussi labels. A la fin on a λ(xi ) = d(x1 , xi ) pour tout xi ∈ X.
Exemple d’application On considère le graphe suivant avec a comme sommet source :
4
b d
7
2 5
1
a 5 e
1 2 3
7
c f
On obtient alors :
Sommets a b c d e f
Initialisation 0 7 1∗ ∞ ∞ ∞
.. ..
Itération 1 . 6 . ∞ 3∗ 8
.. .. ..
Itération 2 . 5∗ . 8 . 8
.. .. .. ..
Itération 3 . . . 8 . 6∗
.. .. .. .. ..
Itération 4 . . . 8∗ . .
On obtient une arborescence de parcours
b d
2 5
1
a e
1 2
c f
Convergence
Proposition 2.2.1 L’algorithme converge si et seulement si les valuations sont toutes positves.
Algorithme de Bellman
Cet algorithme permet de rechercher le plus court chemin d’un sommet s aux autres sommets
dans un graphe quelconque ou de rechercher un circuit de longueur négative.
Principe
L’algorithme consiste à déterminer à chaque itération k les valeurs des plus courts chemins
de s aux autres sommets ne contenant pas plus de k arcs. On note λk (x) la longueur d’un chemin
de s à x à la kieme itération.
Algorithme
1. Initialisation
λ0 (x1 ) = 0
λ0 (xi ) = +∞ pour tout xi 6= x1
k=1
2. A l’itération k
Faire λk (x1 ) = 0
et λk (xj ) = Min(λk−1 (xj ), Minxi ∈P (xj ) (λk−1 (xi ) + l(xi , xj ))) pour tout xj 6= x1
où p est inférieur à k est l’étape de la dernière mise à jour relative au sommet xi .
Exemple d’application
On considère le graphe suivant avec a comme sommet source :
4
b d
7 1
2
2
a 2 e
8 3
-2
2
c f
On obtient alors :
Sommets a b c d e f
Initialisation 0 ∞ ∞ ∞ ∞ ∞
Itération 1 0 7 8 ∞ ∞ ∞
Itération 2 0 7 8 11 8 9
Itération 3 0 7 6 10 8 9
Itération 4 0 7 6 10 8 8
Itération 5 0 7 6 10 8 8
On obtient une arborescence de parcours
Définition 2.2.1 Soit G un graphe orienté sans circuit. On appelle niveau d’un sommet x, la
longueur (au sens des arcs) du plus long chemin ayant pour extrémité terminale x.
Soit G un graphe orienté sans circuit. Pour déterminer les niveaux des sommets de G on
peut utiliser soit le dictionnaire des précédents soit la matrice booléenne.
Exemple d’application 1
On considère le graphe suivant :
4
b d
7 2
5
2 1
a 5 e
1
2 3
7
c f
Exemple d’application 2
On considère le graphe suivant donné par son dictionnaire des précédents : Déterminer les
niveaux des sommets et dresser le graphe ordonnancé par niveaux.
Sommets Précédents
a -
b a
c b
d a
e a
f d
g f
h e, c, g
i h, k
j a
k j
m k
n m
C) Algorithme de Ford
Soit G = (X, U, l) un graphe orienté valué sans circuit où X = {x1 , x2 , . . . , xn }. On suppose
que P (x1 ) = ∅.
L’algorithme de Ford détermine les plus courtes distances de x1 à tous les autres sommets
du graphe.
1. Initialisation Poser λ(x1 ) = 0 et X ′ = {x1 }
2. Rechercher un sommet xj ∈ / X ′ tel que P (xj ) ⊂ X ′
3. Poser λ(xj ) = min[λ(xi ) + l(xi , xj ) : xi ∈ P (xj )], X ′ := X ′ ∪ {xj }
4. Si |X ′ | = n, FIN
5. Aller à 2
A la fin de l’algorithme, les valeurs λ(xi ) est la plus courte distance de x1 à xi .
Exemple d’application
Appliquer l’algorithme de Ford aux graphes ci-dessus.
Chapitre 3
Problèmes d’ordonnancement
Ti Ti∗
i
où i désigne le nom de la tâche, Ti la date de début au plus tôt de la tâche et Ti∗ la date de
début au plus tard de la tâche.
Tâches a b c d e f g
Durées 4 3 6 2 8 7 1
Tâches antérieures a,b b c,d,e c
On obtient le graphe potentiel-tâches G = (S, A, l) ci-dessous, où S = {deb, a, b, c, d, e, f, g, f in}
4 6
a c g
3 6 1
3 2 7
deb b d f fin
ou encore
M L(i) = Ti′ − Ti
. Contrairement à la marge totale, la marge libre peut être consommée sans aucune conséquence
sur les tâches qui suivent dans le projet. La marge libre d’une tâche est toujours inférieure ou
égale à sa marge totale.
Le schéma ci-dessous signifie par exemple : a et b doivent être terminées pour que c et d
puissent commencer.
E1 E4
a c
b d
E2 E3 E5
On définit d’abord les notions suivantes :
Les tâches successives se suivent dans le temps et sont représentées par un chemin. Par
exemple les tâches a, b, c sont successives :
a b c
E1 E2 E3 E4
Les tâches simultanées ont le même début d’exécution. Par exemple les tâches a, b sont si-
multanées :
E2
a
E1 E3
Les tâches convergentes aboutissent à la même étape. Par exemple a, b sont convergentes :
E2
a
E3 E1
a
E1 E2 E3 E4
Il y a aussi certaines représentations qui peuvent impliquer des conditions qui ne sont pas
prévues dans les données.
Par exemple la situation où a et b sont antérieures à c et b est antérieure à d ne peut être
représentée par le schéma ci-dessous :
E1 E4
a c
b d
E2 E3 E5
car cela impliquerait que a précède d, ce qui n’est pas une donnée du problème. On considère
la représentation suivante :
a c
E1 E3 E5
b d
E2 E4 E6
Définition 3.2.1 On appelle date au plus tôt de réalisation de l’évènement Ej , est la longueur
du plus long chemin dans le graphe reliant E1 à Ej . C’est aussi la date attendue de réalisation
de l’évènement Ej . On la note tj .
Définition 3.2.2 On appelle ordonnancement minimum ou au plus tôt, l’ensemble de toutes les
dates attendues ti , i = 1 · · · N .
Pratiquement on utilise les formules suivantes pour calculer les tj .
(
t0 = 0
tj = Maxi∈P (j) (ti + dij ) pour j ∈ {1, . . . , N }
où dij est la durée de la tâche (Ei , Ej ).
Définition 3.2.3 Pour toute tâche (Ei , Ej ), la date de début au plus tôt est Tij = ti .
Les dates atendues ti étant connues, on détermine le (ou les) chemin(s) critique(s) constitués
des arcs (Ei , Ej ) pour lesquels tj − ti = dij .
Les évènements Ei situés sur le chemin critique sont dits évènements critiques.
Remarque 3.2.1 Tout retard apporté sur la réalisation d’un évènement critique ralentit le
programme entier de la même durée.
Définition 3.2.4 On appelle date limite (ou plus tard) de réalisation de l’évènement Ei , t∗i =
tN − τi,n où τi,n est la longueur d’un plus long chemin dans le graphe reliant Ei à EN .
Définition 3.2.5 On appelle ordonnancement limite ou au plus tard, l’ensemble de toutes les
dates limites t∗i , i = 1 · · · N .
Définition 3.2.6 Pour toute tâche (Ei , Ej ), la date de début au plus tard est Tij∗ = t∗j − dij .
C’est l’intervalle dans lequel peut intervenir la réalisation de Ei sans compromettre la durée
totale (minimale) d’exécution de l’ensemble du programme. Un tel intervalle est de longueur
nulle pour un évènement critique.
M L(i, j) = tj − ti − dij .
Elle représente le delai ou retard maximum que l’on peut apporter à sa mise en route sans
perturber la date attendue de réalisation de l’évènement Ej , l’évènement Ei ayant eu lieu à sa
date attendue.
Elle représente pour cette opération, le delai ou retard maximum que l’on peut apporter à
sa mise en route lorsque l’évènement Ei a eu lieu à sa date attendue sans perturber la date de
fin des travaux.
Problèmes de flots
4.1 Définitions
Définition 4.1.1 On appelle réseau, un graphe G = (X, U ) orienté sans boucle possédant deux
sommets particuliers s et p appelés respectivement source et puits et qui sont respectivement
une racine et une antiracine de G (c’est-à-dire pour tout x ∈ X, il existe dans G un chemin
d’origine s et d’extremité x et un chemin d’origine x et d’extremité p) dont les arcs sont munis
de capacités données c(u) ≥ 0 pour tout u ∈ U . On le note R = (X, U, s, p, c)
Définition 4.1.2 Soit R = (X, U, s, p, c) un réseau. Un flot sur R est une application f : U −→
R+ .
Pour tout u ∈ U , f (u) est la quantité de flot ou le flux qui circule sur l’arc u.
Définition 4.1.3 On dit qu’un flot f sur R = (X, U, s, p, c) respecte les contraintes de capacité
ou que f est compatible avec c si, pour tout u ∈ U , on a : 0 ≤ f (u) ≤ c(u).
Définition 4.1.4 On dit qu’un flot f sur R = (X, U, s, p, c) est conservatif si, pour tout x ∈
X \ {s, p}, la somme des quantités de flots portées par les arcs sortant de x est égale à la somme
des quantités de flots portées par les arcs entrant en x.
Définition 4.1.5 Soit f un flot sur R. On appelle valeur de f , le nombre v(f ) égal à la
différence entre la somme des quantités de flots portées par les arcs sortant de s et la somme
des quantités de flots portées par les arcs entrant en s.
Exemple 4.1.1
[3] 3
x1 x3
[6] 4 [4] 3
[4] 1
s p
[6] 3 [7] 4
[5] 3
x2 x4
La valeur du flot ci-dessus est v(f ) = 7.
ω + (S) = {u = (x, y) ∈ U : x ∈ S, et y ∈
/ S},
ω − (S) = {u = (x, y) ∈ U : x ∈
/ S, et y ∈ S}.
Pour S = X, on a ω + (X) = ∅ et ω − (X) = ∅.
On considère X X
df (S) = f (u) − f (u),
u∈ω + (S) u∈ω − (S)
Remarque 4.1.1 Un flot f sur R est conservatif si, pour tout x ∈ X \ {s, p}, on a : df (x) = 0.
On a
ω + (X1 ) = (ω + (X1 ) \ ω − (X2 )) ∪ (ω + (X1 ) ∩ ω − (X2 ))
ω + (X2 ) = (ω + (X2 ) \ ω − (X1 )) ∪ (ω + (X2 ) ∩ ω − (X1 ))
ω − (X1 ) = (ω − (X1 ) \ ω + (X2 )) ∪ (ω − (X1 ) ∩ ω + (X2 ))
ω − (X2 ) = (ω − (X2 ) \ ω + (X1 )) ∪ (ω − (X2 ) ∩ ω + (X1 ))
et qui expriment que l’ensemble ω + (X1 ) des arcs qui sortent de X1 est égal à la réunion
de l’ensemble ω + (X1 ) \ ω − (X2 ) des arcs qui sortent de X1 et qui n’entrent pas dans X2 et de
l’ensemble ω + (X1 ) ∩ ω − (X2 ) des arcs qui sortent de X1 et qui entrent dans X2 etc ...
De même on a :
ω + (X1 ∪ X2 ) = (ω + (X1 ) \ ω − (X2 )) ∪ (ω + (X2 ) \ ω − (X1 ))
ω − (X1 ∪ X2 ) = (ω − (X1 ) \ ω + (X2 )) ∪ (ω − (X2 ) \ ω + (X1 ))
car l’ensemble ω + (X1 ∪ X2 ) des arcs qui sortent de X1 ∪ X2 est égal à la réunion de l’ensemble
ω + (X1 ) \ ω − (X2 ) des arcs qui sortent de X1 et qui n’entrent pas dans X2 et de l’ensemble
ω + (X2 ) \ ω − (X1 ) des arcs qui sortent de X2 et qui n’entrent pas dans X1 etc ...
On voit ainsi que :
On a le corollaire
Corollaire 4.1.1 On a :
P
1) d(S) = x∈S d(x) pour tout S ⊂ X.
2) d(S) = 0 pour tout S ⊂ X avec S ∩ {s, p} = ∅.
3) d(X) = 0.
4) d(s) + d(p) = 0
5) Si X1 et X2 constituent une partition de X avec s ∈ X1 et p ∈ X2 , on a d(X1 ) = d(s) =
v(f ).
Définition 4.1.6 On appelle flot réalisable sur R tout flot compatible avec les contraintes de
capacités et conservatif. On note FR l’ensemble des flots réalisables sur R.
v(f ) ≤ v(f ∗ ) ∀ f ∈ FR .
Définition 4.2.2 Un chemin de s à p est saturé pour un flot f ∈ FR si au moins un des arcs
qui le composent est saturé
Définition 4.2.3 Un flot f ∈ FR est complet si tout chemin de s à p est saturé pour f .
Une première idée pour maximiser un flot est de saturer successivement les chemins de s
à p. On obtiendra alors un flot complet. On verra plutard que ce flot n’est pas nécessairement
maximal mais il fournit une excellente solution de depart pour appliquer un algorithme itératif
de détermination d’un flot maximal.
1. Marquer s
2. Soit x un sommet marqué et non encore examiné ;
Marquer y par (+x) si y est un successeur non marqué de x avec f (x, y) < c(x, y)
3. Si p est marqué (on a un chemin augmentant), aller en (4)
Si tous les sommets marqués sont examinés alors le flot est complet ;
sinon aller en (2)
4. Améliorer le flot
Effacer les marques
Aller en (1)
Exemple 4.2.1
Le flot ci-dessous est complet.
[5]2
x1 x5
[5] 5 [2]2
s x2 x4 p
[2]2
x3 x6
Remarque 4.2.1 Dans l’application manuelle de l’algorithme, on peut souvent gagner du temps
en saturant en priorité les chemins pour lesquels δ est aussi grand que possible.
Définition 4.3.1 Une coupe de R est un ensemble de sommets contenant s et ne contenat pas
p.
On appelle capacité d’une coupe C de R, la somme des cpacités des arcs sortant de C. On
note X
c(C) = c(u).
u∈ω + (C)
Exemple 4.3.1
[6] 4 [4] 3
[4] 1
s p
[6] 3 [7] 4
[5] 3
x2 x4
On montre que
Proposition 4.3.2 Si f ∈ FR et C est une coupe de R, avec v(f ) ≥ c(C), alors f est de valeur
maximale et la coupe C est de capacité minimale.
Définition 4.3.3 Soit f un flot réalisable sur R. Une chaı̂ne C de s à p est dite saturée pour
f , s’il existe au moins un arc direct u ∈ C tel que f (u) = c(u) ou s’il existe au moins un arc
inverse u de C tel que f (u) = 0.
Une chaine non saturée est aussi appelée chaine augmentante, améliorante ou amplificatrice.
Remarque 4.3.1 Une chaine C de s à p est améliorante pour un flot réalisable f sur R si
- pour tout arc direct de C, on a c(u) − f (u) > 0.
- pour tout arc inverse de C, on a f (u) > 0.
On a la proposition suivante :
Preuve :
Pour tout arc u, on f ′ (u) ≥ 0 car soit f ′ (u) = f (u) ≥ 0 soit f ′ (u) = f (u) + δ > 0, soit enfin
f ′ (u) = f (u) − δ. Ce dernier cas ne peut se produire que pour les arcs inverses de C, et dans ce
cas on a f (u) ≥ δ2 ≥ δ. Donc on a f ′ (u) = f (u) − δ ≥ 0.
De même on a pour chaque arc u, f ′ (u) ≤ c(u) car soit f ′ (u) = f (u) ≤ c(u), soit f ′ (u) =
f (u) − δ ≤ f (u) ≤ c(u), soit f ′ (u) = f (u) + δ. Cette dernière éventualité est relative au cas où
l’arc u est direct dans la chaine C. Or dans ce cas on a δ ≤ δ1 ≤ c(u) − f (u). Ce qui implique
que f ′ (u) = f (u) + δ ≤ c(u).
Il reste à montrer que f ′ est conservatif. C’est-à-dire que pour tout sommet x ∈ X \ {s, p}
on doit avoir X X
d′ (x) = df ′ (x) = f ′ (u) − f ′ (u) = 0.
u∈ω + (x) u∈ω − (x)
et pour chaque arc u de ω + (x) ou de ω − (x), on a f ′ (x) = f (u) et donc d′ (x) = d(x) = 0.
• Si x ∈ C \ {s, p} on a quatre possibilités.
a) x est extrémité de ui et est origine de ui+1
Dans ce cas f ′ (ui ) = f (ui ) + δ, ui ∈ ω − (x) et f ′ (ui+1 ) = f (ui+1 ) + δ, ui+1 ∈ ω + (x). Les
autres arcs de ω + (x) et de ω − (x) n’appartiennent pas à {u1 , u2 , · · · , ul } et sur chacun, on a
f ′ (ui ) = f (ui ). Par conséquent
X X
f ′ (u) = f (u) + δ
u∈ω + (x) u∈ω + (x)
et X X
f ′ (u) = f (u) + δ
u∈ω − (x) u∈ω + (x)
d′ (x) = d(x) = 0.
b) x est extrémité de ui et de ui+1
On a f ′ (ui ) = f (ui ) + δ, ui ∈ ω − (x) et f ′ (ui+1 ) = f (ui+1 ) − δ, ui+1 ∈ ω − (x). Les autres arcs
de ω + (x) et de ω − (x) n’appartiennent pas à {u1 , u2 , · · · , ul } et sur chacun, on a f ′ (ui ) = f (ui ).
Par conséquent X X
f ′ (u) = f (u)
u∈ω + (x) u∈ω + (x)
et X X X
f ′ (u) = f (u) + δ − δ = f (u)
u∈ω − (x) u∈ω + (x) u∈ω + (x)
Exemple 4.3.2
[4] 1
x1 x3
[4] 2 [4] 4
s [1] 1 [3] 3 p
[2] 1 [7] 2
[4] 3
x2 x4
[4] 4
Dans le réseau ci-dessus la valeur du flot f est v(f ) = 6.
La chaine (s, x1 , x3 , x4 , p) est une chaine améliorante pour le flot f . On a δ = 2. le nouveau
flot f ′ est le suivant et sa valeur est v(f ′ ) = 8.
[4] 3
x1 x3
[4] 4 [4] 4
s [1] 1 [3] 1 p
[2] 1 [7] 4
[4] 3
x2 x4
[4] 4
En conséquence de la proposition ci-dessus, on a :
Proposition 4.3.4 Un flot f est de valeur maximale sur R si et seulement s’il n’existe pas dans
R de chaı̂ne améliorante pour f .
Preuve :
Supposons qu’il n’existe pas dans R de chaı̂ne améliorante pour f et montrons v(f ) est
maximal. Il suffit de montrer qu’il existe une coupe C telle que v(f ) = c(C).
Considérons l’ensemble X1 défini comme suit.
i) s ∈ X1
ii) Si xi ∈ X1 et si u = (xi , xk ) est un arc alors xk ∈ X1 si et seulement si f (u) < c(u).
iii) Si xi ∈ X1 et si u = (xk , xi ) est un arc alors xk ∈ X1 si et seulement si f (u) > 0.
On remarque que :
- s ∈ X1
- Si u est un arc de G sortant d’un sommet de X1 , et si la capacité résiduelle de u c(u) − f (u)
n’est pas nulle alors l’extrémité terminale de u appartient à X1 .
- Si u est un arc de G entant en un sommet de X1 , et si le flux circulant sur u, f (u) n’est
pas nulle alors l’extrémité initiale de u appartient à X1 .
Par construction, pour tout xi nX1 (x 6= s) il existe au moins une chaine C reliant s à x avec
tous les sommets de C qui sont dans X1 .
Pour une telle chaı̂ne on a :
• pour tout arc direct u de C, on a f (u) < c(u). Ce qui implique δ1 = min[c(u) − f (u) : u ∈
C+] > 0
• pour tout arc inverse u de C, on a f (u) > 0. Ce qui implique que δ2 = min[f (u) : u ∈
C − ] > 0. Donc δ = min{δ1 , δ2 } > 0.
Montrons à présent que p ∈ X1 .
Si p appartient à p, alors d’après ci-dessus il existe une chaı̂ne C de s à p avec δ > 0. Ce qui
implique que C est améliorante. Ce qui est une contradiction. Donc p ∈ / X1 .
On sait que v(f ) = d(s) = d(X1 ).
Or X X
d(X1 ) = f (u) − f (u)
ω + (X1 ) ω − (X1 )
on a
ω + (X1 ) = {u = (xi , xk ) : xi ∈ X1 et xk ∈
/ X1 }
Donc pour tout u ∈ ω + (X1 ) on a f (u) = c(u).
ω − (X1 ) = {u = (xk , xi ) : xk ∈
/ X1 et xi ∈ X1 }
Donc pour tout u ∈ ω − (X1 ), on a f (u) = 0.
Par suite on a X
d(X1 ) = c(u) = c(X1 ).
ω + (X1 )
Ce qui implique que v(f ) = c(C). Par suite f est de valeur maximale.
On a alors une condition nécessaire et suffisante pour qu’un flot soit de valeur maximale.
Proposition 4.3.5 une condition nécessaire et suffisante pour que f soit de valeur maximale
est qu’il n’existe pas de chaine améliorante pour f de s à p.
Théorème 4.3.1 Dans R, la valeur maximale des flots réalisables est égale à la capacité mini-
male des coupes.
Etant donné f un flot réalisable sur R, pour déterminer une chaine améliorante pour f on
peut utiliser l’algorithme suivant.
1) Marquer s
2) Marquer s tout sommet suivant x de s tel que pour l’arc u = (s, x) on a f (u) < c(u)
2) x étant un sommet déjà marqué, marquer ”x”
- tout sommet suivant y de x non encore marqué tel que pour l’arc u = (x, y) on a
f (u) < c(u).
- tout sommet précédent y de x non encore marqué tel que pour l’arc u = (y, x) on a
f (u) > 0.
Si par cette procédure, p ne peut pas être marqué, alors il n’existe pas de chaine améliorante
reliant s à p.
Si au contraire, la procédure permet de marquer p, on obtient à partir de p, en utilisant
la marque de certains sommets marqués une chaine améliorante reliant s à p. Cette chaine se
construit à l’envers de la façon suivante.
- Relier p au sommet correspondant à la marque de p.
- Recommencer à partir du sommet obtenu et ainsi de suite jusqu’à s.
Exemple 4.3.3
[3] 2
x1 x 5 xx5 4
[2] 2 [5] 5
[2] 2
[1] 0 [2] 1
[5] 5 [2] 2
s∗ x2 x 4 xx4 3 px6
[2] 0 [1] 1
[5] 2 [4] 1 [7] 4
x3 s xx6 2
[2] 2
Le sommet p est marqué. La chaine C = (s, x3 , x4 , x2 , x6 , p) est une chaine améliorante. Donc
le flot ci-dessus n’est pas de valeur maximale.
Etant donné f un flot réalisable sur R et C une chaine améliorante pour f , on obtient un
flot améliorant la valeur de f à l’aide de la procédure suivante.
1) On calcule
δ1 = min [c(u) − f (u) : u ∈ C + ]
δ2 = min [f (u) : u ∈ C − ]
δ = min{δ1 , δ2 }
2) Modification
- sur chaque arc u ∈ C + augmenter le flux de δ
- sur chaque arc u ∈ C − diminuer le flux de δ