Sunteți pe pagina 1din 39

INFO 2 Semestre 3 2010

IUT de LAVAL
Dpartement Informatique
Polycopi de cours
Outils mathmatiques de modlisation
Yann Walkowiak
1
http://www.univ-lemans.fr/~ywalko
yann.walkowiak@univ-lemans.fr
1. Merci Franois Clautiaux et Serge Iovle dont les documents mont aid rdiger ce cours.
Table des matires
1 Rappels sur les graphes 1
1.1 Graphes et modlisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Graphe orient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Graphe non orient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Multigraphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Graphe partiel et sous-graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Isomorphisme de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7 Thorme des poignes de mains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Chemin, circuit, chane, cycle, et connexit 7
2.1 Dnitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Connexit et forte connexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Cycles euleriens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Cyces hamiltoniens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Recherche de plus court chemin 11
3.1 Graphes valus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Problme de la recherche du plus court chemin . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Algorithme de Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.4 Algorithme de Bellman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.5 Algorithme de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6 Comparaison des algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Arbre couvrant de poids minimal 21
4.1 Dnitions et proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 Arbre couvrant de poids minimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3 Algorithme de Kruskal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.4 Algorithme de Prim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5 Flot dans un rseau de transport 25
5.1 Rseau de transport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.2 Flot dans un rseau de transport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
i
ii Table des matires
5.3 Coupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.4 Chemin augmentant / Chane augmentante . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.5 Flot complet / Flot maximal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6 Thorie des langages 31
6.1 Mots, langages et expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2 Automates nis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Liste des algorithmes
1 Initialisation des algorithmes de recherche des plus courts chemins . . . . . . . . . . . . . 13
2 Technique de relchement ou damlioration locale . . . . . . . . . . . . . . . . . . . . . . 14
3 Algorithme de Bellman-Ford (plus courts chemins, cas gnral) . . . . . . . . . . . . . . . 14
4 Tri topologique dun graphe sans circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5 Algorithme de Bellman (plus courts chemins, graphes sans circuits) . . . . . . . . . . . . . 16
6 Algorithme de Dijkstra (plus courts chemins, valuations positives) . . . . . . . . . . . . . 18
7 Algorithme de Kruskal (arbre couvrant de poids minimal) . . . . . . . . . . . . . . . . . . 23
8 Algorithme de Prim (arbre couvrant de poids minimal) . . . . . . . . . . . . . . . . . . . 24
9 Algorithme de Ford-Fulkerson (recherche de ot complet/maximal) . . . . . . . . . . . . . 29
iii
iv Liste des algorithmes
Partie 1
Rappels sur les graphes
1.1 Graphes et modlisation
De manire gnrale, un graphe est un ensemble de sommets et dartes (ou arcs) reliant ces sommets.
Cet objet trs simple permet de modliser des situations trs direntes :
circulation dans une ville : sommets=carrefours, arcs=rues (ventuellement en sens unique)
plan de mtro : sommets=arrts, artes=voies
rseau informatique : sommets=ordinateur, artes=connexions physiques
organisation logistique : sommets=vnements, artes=impossibilits
gestion de projet : sommets=tches, arcs=une tche ne peut commencer que si la prcdente est
termine
Il existe dirents types de graphes, orients ou non, ou autorisant plusieurs arcs entre deux sommets.
En modlisation, il faudra bien analyser le problme avant de choisir la reprsentation la plus adapte.
Dans la suite, nous allons xer le vocabulaire propre chaque type.
1.2 Graphe orient
Dnition 1.2.1. Un graphe orient est un couple G = (S, A) o S est un ensemble ni appel ensemble
des sommets et A est un sous-ensemble de S S appel ensemble des arcs.
Une manire de visualiser un graphe est sa reprsentation sagittale : on dessine un point pour chaque
sommet et les arcs entre deux sommets sont reprsents par une che.
Exemple 1.2.1.
S = {a, b, c, d} A = {(a, b), (b, a), (b, d), (c, c), (c, d)}
a

b

c

d
Figure 1.1 Reprsentation sagittale du graphe de lexemple 1.2.1
1
2 Rappels sur les graphes
Dnition 1.2.2 (Terminologie). Soient G = (S, A) un graphe orient et a = (x, y) A un arc de G.
x est appel l origine de a et y l extrmit de a.
On dit aussi que y est un successeur de x ou que x est un prdcesseur de y.
Un arc de la forme (x, x) est appel une boucle.
On notera

+
(x) = {y S | y successeur de x} lensemble des successeurs dun sommet x
et

(x) = {y S | y prdecsseur de x} lensemble des prdcesseurs dun sommet x


On dnit alors
d
+
(x) = |
+
(x)| = degr extrieur de x
d

(x) = |

(x)| = degr intrieur de x


et
d(x) = d
+
(x) +d

(x) = degr de x
Attention, sil y a une boucle (x, x) au sommet x, alors x est la fois son propre successeur et son propre
prdcesseur.
Dnition 1.2.3. Soit G = (S, A) un graphe avec S = {x
1
, x
2
, . . . , x
n
}.
On appelle matrice dadjacence du graphe G la matrice M = (a
i,j
)
1in
1jn
carre dordre n dnie par
a
i,j
=

1 si (x
i
, x
j
) A
0 sinon
On appelle liste dadjacence du graphe G la liste des successeurs pour chaque sommet.
Exemple 1.2.2. La matrice dadjacence du graphe de lexemple 1.2.1 est
M =

0 1 0 0
1 0 0 1
0 0 1 1
0 0 0 0

Sa liste dadjacence est


a b
b a d
c c d
d
quon peut aussi crire sous la forme {{b}, {a, d}, {c, d}, {}}.
Limplmentation dun graphe en machine passe par le choix dune de ces reprsentations. Quelle est
votre avis la meilleure ?
1.3. Graphe non orient 3
1.3 Graphe non orient
Dnition 1.3.1. Un graphe non orient est un couple G = (S, A) o S est un ensemble ni appel
ensemble des sommets et A est un ensemble de paires (non ordonnes) de sommets appel ensemble des
artes.
Comme pour les graphes orients, on peut visualiser un graphe via sa reprsentation sagittale : on
dessine un point pour chaque sommet et chaque arte entre deux sommets est reprsente par un segment.
A tout graphe orient est associ le graphe non orient obtenu en oubliant lorientation, i.e. en remplaant
les arcs par des artes.
Exemple 1.3.1.
S = {a, b, c, d} A = {(a, b), (b, d), (c, c), (c, d)}
a
b
c
d
Figure 1.2 Reprsentation sagittale du graphe de lexemple 1.3.1
Dnition 1.3.2 (Terminologie). Soient G = (S, A) un graphe non orient et a = (x, y) A une arte
de G.
x et y sont les extrmits de a.
On dit aussi que x et y sont voisins.
Une arte de la forme (x, x) est appele une boucle.
On notera
(x) = {y S | y voisin de x} lensemble des voisins dun sommet x
On dnit alors le degr dun sommet x :
d(x) =

|(x)| sil ny a pas de boucle en x


|(x)| + 1 sinon
Dnition 1.3.3. Soit G = (S, A) un graphe non orient avec S = {x
1
, x
2
, . . . , x
n
}.
On appelle matrice dadjacence du graphe G la matrice M = (a
i,j
)
1in
1jn
carre dordre n dnie par
a
i,j
=

1 si (x
i
, x
j
) A
0 sinon
On appelle liste dadjacence du graphe G la liste des successeurs pour chaque sommet.
La matrice dadjacence dun graphe non orient est ncessairement symtrique.
4 Rappels sur les graphes
Exemple 1.3.2. La matrice dadjacence du graphe de lexemple 1.3.1 est
M =

0 1 0 0
1 0 0 1
0 0 1 1
0 1 1 0

Sa liste dadjacence est


a b
b a d
c c d
d b c
quon peut aussi crire sous la forme {{b}, {a, d}, {c, d}, {b, c}}.
1.4 Multigraphe
Nous rencontrerons aussi de faon plus anecdotique des multigraphes :
Dnition 1.4.1. On appelle multigraphe orient (respectivement non orient) un graphe dans lequel
deux sommets peuvent tres relis par plusieurs arcs (respectivement artes).
Figure 1.3 exemple de multigraphe non orient
1.5 Graphe partiel et sous-graphe
Dnition 1.5.1. Le graphe partiel dun graphe G = (S, A), orient ou non, engendr par un sous-
ensemble A

de A, est le graphe G

= (S, A

).
Dnition 1.5.2. Le sous-graphe dun graphe G = (S, A), orient ou non, engendr par un sous-
ensemble de sommets S

de S, est le graphe G

= (S

, A
S
) o (x, y) A
S
si et seulement si x S

,
y S

et (x, y) A.
1.6 Isomorphisme de graphes
Un graphe peut avoir des reprsentations sagittales en apparence trs direntes, comme dans la
gure 1.4.
1.7. Thorme des poignes de mains 5
Figure 1.4 deux reprsentations sagittales du mme graphe
La notion disomorphisme de graphes permet de prouver que deux graphes de reprsentations di-
rentes sont en fait identiques.
Dnition 1.6.1. Deux graphes orients G = (S, A) et G

= (S

, A

) sont isomorphes sil existe une


application bijective f : S S

telle que
x, y S, (x, y) A (f(x), f(y)) A

1.7 Thorme des poignes de mains


Thorme 1.7.1. Soit G = (S, A) un graphe orient. On a

xS
d

(x) =

xS
d
+
(x) = |A|
Si G = (S, A) est un graphe non orient, on a

xS
d(x) = 2|A|
Corollaire 1.7.1. Dans un graphe, le nombre de sommets de degr impair est toujours pair.
6 Rappels sur les graphes
Partie 2
Chemin, circuit, chane, cycle, et connexit
2.1 Dnitions
Dnition 2.1.1. Soit G = (S, A) un graphe orient. Un chemin C de longueur k dun sommet x vers
un sommet y est une suite (x
0
, x
1
, . . . , x
k
) de sommets tels que x
0
= x, x
k
= y et (x
i1
, x
i
) A pour
i = 1, 2, . . . , k.
x est appel l origine et y l extrmit du chemin C.
La longueur dun chemin est le nombre darcs dans le chemin.
Un sommet y est dit accessible partir dun sommet x sil existe un chemin de x vers y.
Dnition 2.1.2. Soit G = (S, A) un graphe orient. Un circuit est un chemin de longueur non nulle
dont lextrmit et lorigine sont identiques.
Dnition 2.1.3. Un chemin ou un circuit est dit
simple sil ne contient pas deux fois le mme arc ;
lmentaire sil ne passe pas deux fois par le mme sommet ( lexception de lorigine et de lextr-
mit pour un circuit)
Un chemin lmentaire est toujours simple. En eet, si un chemin passe deux fois par le mme arc, il passe
obligatoirement plusieurs fois par les extrmits de cet arc.
Dnition 2.1.4. Les notions correspondantes existent pour les graphes non orients. On utilise alors
plutt le vocabulaire suivant :
Orient Non orient
arc arte
chemin chane
circuit cycle
2.1.1 Utilisation de la matrice dadjacence
Dnition 2.1.5. On dnit le produit de deux matrices dadjacence de mme ordre n de la faon
suivante : si A = (a
i,j
) et B = (b
i,j
), alors AB = (c
i,j
) avec
c
i,j
=
n

k=1
a
i,k
b
k,j
7
8 Chemin, circuit, chane, cycle, et connexit
On note A
2
le produit AA et A
p
le produit AA A

p fois
.
Proposition 2.1.1. Soit G un graphe orient (respectivement non orient) dordre n et soit M sa matrice
dadjacence. Alors pour tout entier k > 0 et pour tout couple (i, j) {1, 2, . . . , n},
Llment M
k
(i, j) est le nombre de chemins (respectivement chanes) de longueur k de i vers j.
Llment M
k
(i, i) est le nombre de circuits (respectivement cycles) de longueur k partir de i.
2.2 Connexit et forte connexit
2.2.1 Connexit
Dnition 2.2.1. Un graphe non orient est connexe si, pour tout couple de sommets x, y (x = y),
il existe une chane reliant x et y.
Un graphe orient est connexe si le graphe non orient associ est connexe.
Dnition 2.2.2. Soit G un graphe non orient. La relation R dnie sur S par xRy (x = y ou
il existe une chane de x y) est une relation dquivalence. Ses classes dquivalences sont appeles les
composantes connexes de G.
Exemple 2.2.1. Le graphe de la gure 2.1 est-il connexe ? Sinon, combien a-t-il de composantes connexes ?
Figure 2.1 Composantes connexes dun graphe
Proposition 2.2.1. Un graphe est connexe si et seulement sil na quune seule composante connexe.
2.2.2 Forte connexit
Dnition 2.2.3. Un graphe orient est fortement connexe si pour tout couple de sommets x, y (x = y),
il existe un chemin de x vers y
1
.
Dnition 2.2.4. Soit G un graphe orient. La relation R dnie sur S par xRy ((x = y) ou (il existe
un chemin de x vers y et un chemin de y vers x)) est une relation dquivalence. Ses classes dquivalences
sont appeles les composantes fortement connexes de G.
Exemple 2.2.2. Le graphe de la gure 2.2 est-il fortement connexe ? Sinon, combien a-t-il de composantes
fortement connexes ?
Thorme 2.2.1. Un graphe orient fortement connexe est connexe.
1. il existe alors ncessairement aussi un chemin de y vers x
2.3. Cycles euleriens 9
Figure 2.2 Composantes fortement connexes dun graphe
2.3 Cycles euleriens
Lhistoire veut que la thorie des graphes soit ne alors que Leonard Euler se trouvait dans la ville de
Konigsberg et tentait de rpondre rigoureusement la question suivante : Est-il possible de trouver un
circuit qui emprunte une fois et une seule chaque pont de la ville ?
Dnition 2.3.1. Soit G un graphe non orient. Une chane (respectivement un cycle) eulrienne est
une chane (respectivement un cycle) qui passe une fois et une seule par toutes les artes de G.
Ces dnitions stendent naturellement aux multigraphes. Euler a dmontr les rsulats suivants, qui
caractrisent les multigraphes non orient possdant un cycle eulrien.
Thorme 2.3.1. Un multigraphe non orient G = (S, A) admet un cycle eulrien si et seulement si
1. G est connexe
2. x S, d(x) est pair
Thorme 2.3.2. Un multigraphe non orient G = (S, A) admet une chane eulrienne entre les sommets
a et b si et seulement si
1. G est connexe
2. x S \ {a, b}, d(x) est pair
3. d((a) et d(b) sont impairs.
10 Chemin, circuit, chane, cycle, et connexit
2.4 Cyces hamiltoniens
Il existe une notion analogue pour les sommets :
Dnition 2.4.1. Soit G un graphe non orient. Une chane (respectivement un cycle) hamiltonienne
est une chane (respectivement un cycle) qui passe une fois et une seule par tous les sommets de G.
Cette dnition stend galement aux graphes orients et aux multigraphes
2
.
Exemple 2.4.1. Les graphes de la gure 2.3 admettent-ils selon vous une chane hamiltonienne ? un
circuit hamiltonien ?
a
b
c
d
Figure 2.3 Chane hamiltonienne ? Cycle hamiltonien?
Il est naturel de se poser le mme type de question que pour les cycles eulriens : y a-t-il un critre
pour savoir sil existe un cycle (ou une chane) hamiltonien? Malgr limpression que le problme pos
nest pas si dirent, la rponse est cette fois-ci ngative, il ny a pas de mthode ecace.
Contrairement aux cycles eulriens, il nexiste pas de critre simple pour dterminer si un graphe admet
ou non un cycle ou une chane hamiltonienne. Cest un problme algorithmiquement dicile.
2. quil y ait plusieurs artes entre deux sommets ne change pas la nature hamiltonienne ou non du graphe
Partie 3
Recherche de plus court chemin
3.1 Graphes valus
Dnition 3.1.1. Un graphe (orient ou non) G = (S, A) est valu sil est muni dune application
v : A R
(x, y) v(x, y)
appele valuation.
On notera G = (S, A, v) un graphe muni dune valuation v.
A
5

B
0

C
D
2

E
3

F
7

Figure 3.1 Exemple de graphe valu


Les graphes valus servent rsoudre de nombreux problmes doptimisation : la valuation dun arc
ou dune arte peut reprsenter une distance, un temps, un cot, . . .
A partir de la valuation dun arc (respectivement dune arte), on peut facilement dnir la valuation
dun chemin (respectivement dune chane) : cest la somme des valuations des arcs (respectivement artes)
qui composent ce chemin (respectivement chane).
Dnition 3.1.2. Soit C(x, y) un chemin dans G du sommet x vers le sommet y. La valuation ou poids
du chemin C(x, y) est
v(C(x, y)) =

uC(x,y)
v(u)
La valuation dun chemin ne comportant pas darc (i.e. de longueur 0) est gale 0.
Exemple 3.1.1. Dans le graphe de la gure 3.1, la valuation du chemin ABDBEF vaut 5 + 0 + 2 +
(1) + 3 = 9.
Quelles sont les valuations des chemins AB, ADB, ADBDB? Peut-on donner un sens la valuation
du chemin entre A et B ?
11
12 Recherche de plus court chemin
3.2 Problme de la recherche du plus court chemin
De nombreux problmes concrets se traduisent par la recherche dun chemin de longueur minimale :
recherche de litinraire le plus court (valuation dun arc = distance entre deux villes) ou le plus
rapide (valuation dun arc = temps pour parcourir la route entre deux villes) en voiture entre deux
villes.
routage dans des rseaux
etc.
Dnition 3.2.1. Soit G = (S, A, v) un graphe valu et soient x et y deux sommets de G.
On appelle distance entre x et y, et on note d(x, y), le minimum des valuations des chemins allant
de x y :
d(x, y) = min
C(x,y) chemin
v(C(x, y))
Sil nexiste pas de chemin de x y dans G, on posera d(x, y) = +.
On appelle plus court chemin entre x et y, et on note C

(x, y), un chemin qui ralise ce minimum :


v(C

(x, y)) = d(x, y)


Il se peut que le minimum nexiste pas, dans ce cas il est abusif de parler de distance entre deux sommets.
Cest ce qui arrive quand le graphe possde un circuit absorbant, i.e. un circuit de valuation ngative.
Exemple 3.2.1. Le graphe de la gure 3.2 possde un circuit absorbant : on peut trouver un chemin de
A vers C de valuation arbitrairement petite. En eet,
v(A B C) = 2
v(A B C A B C) = 3
et ainsi de suite. . . Il nest donc pas possible de dnir la distance entre A et C et il nexiste pas de plus
court chemin entre ces deux sommets.
A
2

B
4

C
1
@
@
@
@
@
@
@
Figure 3.2 Exemple de graphe possdant un circuit absorbant.
Nous allons dans la suite nous intresser des algorithmes qui cherchent les plus courts chemins entre
un sommet donn x
0
et tous les autres sommets dun graphe. Les rsultats seront stocks de la faon
suivante :
le tableau contient les plus courts chemins de x
0
chaque sommet du graphe ((i) = d(x
0
, i)).
le tableau contient les prdcesseurs de chaque sommet dans le plus court chemin partir de x
0
.
3.2. Problme de la recherche du plus court chemin 13
Exemple 3.2.2. Considrons le graphe suivant :
1
1

>
>
>
>
>
>
>
3

2
2

3
1

4
Figure 3.3 Recherche des plus courts chemins partir du sommet 1
Aprs avoir calcul les plus courts chemins partir du sommet 1, on obtient les tableaux suivants :
i 1 2 3 4
(i) 0 1 3 3
et
i 1 2 3 4
(i) null 1 2 1
On peut galement reprsenter larborescence
1
correspondante :
1
1

>
>
>
>
>
>
>
2
2

4
3
Figure 3.4 Arbre des plus courts chemins partir de 1
Principe gnral des algorithmes
Les trois algorithmes que nous allons tudier fonctionnent de la faon suivante :
on initialise les tableaux et (voir algorithme 1) ;
on calcule les (s) et (s) par approximations successives, ce qui signie qu chaque tape, on
essaye damliorer les valeurs obtenues prcdemment :
lamlioration, au niveau local, se vrie ainsi : pour un sommet x et un successeur y de x, on
compare la valeur (y) obtenue ltape prcdente avec la valeur quon obtiendrait en passant
par x, cest--dire (x) + v(x, y) ; si cette deuxime valeur est plus petite, alors on remplace (y)
par (x) +v(x, y) et le pre (y) par x. Cette technique est appele technique du relchement (voir
algorithme 2).
Algorithme 1 Initialisation des algorithmes de recherche des plus courts chemins
Initialisation(G, x
0
)
1: pour i = 1 n faire
2: (i) +
3: (i) null
4: n pour
5: marquer x
0
6: (x
0
) 0
1. voir dnition 4.1.1 page 21
14 Recherche de plus court chemin
Algorithme 2 Technique de relchement ou damlioration locale
Relcher(G,i,j)
1: si (j) > (i) +v(i, j) alors
2: (j) (i) +v(i, j)
3: (j) i
4: nsi
3.3 Algorithme de Bellman-Ford
Ce premier algorithme est applicable sur tous les types de graphes, il dtectera mme sil y a un cycle
absorbant ou non. Lide est de parcourir tous les sommets et deectuer la technique de relchement
jusqu ce que les distances calcules soient stabilises, i.e. quon ne puisse plus les amliorer. Pour cela,
nous verrons quau pire il faudra parcourir n 1 fois tous les arcs.
On obtient ainsi lalgorithme suivant :
Algorithme 3 Algorithme de Bellman-Ford (plus courts chemins, cas gnral)
Bellman-Ford(G(S,A,v),x
0
)
1: Initialisation(G,x
0
)
2: pour k = 1 n 1 faire
3: pour chaque arc (i, j) A faire
4: Relcher(G,i,j)
5: n pour
6: n pour
7: pour chaque arc (i, j) A faire
8: si (j) > (i) +v(i, j) alors
9: retourner FAUX et sortir de Bellman-Ford
10: nsi
11: n pour
Avant de donner une preuve de lalgorithme, nous allons donner quelques proprits, dans le cas dun
graphe sans circuit absorbant, qui nous seront utiles :
Lemme 3.3.1. 1. Les valeurs (s) ne peuvent que diminuer pendant le droulement de lalgorithme.
2. A chaque tape de lalgorithme, pour tout sommet s, la valeur (s) est soit +, soit gale la
longueur dun chemin de x
0
s.
3. A chaque tape de lalgorithme, (s) d(x
0
, s).
4. Quand la valeur (s) atteint d(x
0
, s), elle ne varie plus dans la suite de lalgorithme.
Preuve. 1. Ce point est vident, puisque les (s) ne sont modis que lors dun ventuel relchement, et
ils sont alors diminus.
2. On dmontre ce point par rcurrence :
A linitialisation, tous les sont + sauf (x
0
) qui vaut 0 = d(x
0
, x
0
).
Supposons que ce soit vrai une tape de lalgorithme. A ltape suivante, on remplace ventuelle-
ment (j) par (i) +v(i, j). Par hypothse de rcurrence, (i) est la longueur dun chemin C(x
0
, i)
et donc (i) +v(i, j) est la longueur du chemin obtenu en ajoutant larc (i, j) au chemin C(x
0
, i).
3. Cest une consquence de 1 et 2, car le graphe ne contient pas de circuit absorbant.
4. Une fois la valeut d(x
0
, s) atteinte, la technique de relchement na plus aucun eet.
3.3. Algorithme de Bellman-Ford 15
Preuve. (Algorithme de Bellman-Ford) Nous devons prouver qu la n de lalgorithme, si le graphe ne
contient pas de circuit absorbant, le tableau contient les plus courtes distances partir du sommet x
0
et le tableau contient les prdcesseurs de chaque sommet dans ce plus court chemin. Pour cel, nous
allons dmontrer par rcurrence sur k la proprit :
(P
k
) Si un plus court chemin lmentaire de x
0
un sommet s comporte k arcs, alors aprs k passages
dans la boucle, on a (s) = d(x
0
, s).
A linitialisation, cest clairement vrai.
Soit p le prdcesseur de s dans un plus court chemin lmentaire comportant k arcs entre x
0
et
s. Alors, il existe un plus court chemin lmentaire comportant k 1 arcs entre x
0
et p, et donc,
en utilisant lhypothse de rcurrence, on en dduit quaprs k 1 passages dans la boucle, on a
(p) = d(x
0
, p).
Aprs le k-ime passage, on compare (s) et (p) + v(p, s), on a alors aprs changement ventuel
de (s), lingalit (s) (p) +v(p, s). On en dduit que
(s) d(x
0
, p) +v(p, s)
d(x
0
, s)
et donc, en utilisant le 3. du lemme, (s) = d(x
0
, s).
Le 4. du lemme nous dit quune fois les bonnes valeurs atteintes, elles ne changent plus. Il reste re-
marquer que dans un graphe n sommets, un chemin lmentaire a au plus n1 arcs et quun plus court
chemin est ncessairement lmentaire. On est alors assur, en au plus n1 tapes, avoir (s) = d(x
0
, s)
pour tous les sommets s. De plus, on a les prdcesseurs de chaque sommet dans un plus court chemin
qui sont stocks dans .
La dernire boucle de lalgorithme permet de dtecter un ventuel circuit absorbant. En eet, si aprs
n 1 passages dans la boucle, les valeurs (s) ne sont pas toutes stabilises, cest quil y a un circuit
absorbant et donc les plus courtes distances ne peuvent tre calcules.
Exemple 3.3.1. Appliquons lalgorithme de Bellman-Ford sur le graphe G de la gure suivante an
dobtenir les plus courts chemins de C vers les autres sommets :
C
3

@
@
@
@
@
@
@
A
2

B
A chaque itration, nous allons parcourir les arcs dans lordre AB, CA, CB et utiliser la technique
de relchement. On obtient les rsultats suivants :

itration A B C A B C
init. + + 0 null null null
k = 1 3 2 0 C C null
k = 2 3 1 0 C A null
Il est possible damliorer lalgorithme en sortant de la boucle ds que les valeurs de sont stabilises.
On peut galement adapter lalgorithme de Bellman-Ford de faon calculer les plus longs chemins.
16 Recherche de plus court chemin
3.4 Algorithme de Bellman
Cet algorithme sapplique aux graphes sans circuit et pour la recherche des plus courts chemins dun
sommet sans prdcesseur x
0
vers tous les autres sommets. La premire tape consistera renumroter
les sommets de faon ne jamais revenir sur nos pas, cest le rle de lalgorithme de tri topologique
dun graphe.
3.4.1 Tri topologique dun graphe sans circuit
Soit G un graphe n sommets sans circuit, G possde alors au moins un sommet sans prdcesseur
que lon note x
0
. Lalgorithme suivant permet deectuer un tri topologique du graphe, cest--dire une
renumrotation des sommets dun graphe orient de telle sorte que :
tous les sommets ont des numros dirents
sil y a un arc dun sommet de numro i vers un sommet de numro j, alors i < j.
Algorithme 4 Tri topologique dun graphe sans circuit
triTopo(G,x
0
)
1: Numroter 1 le sommet x
0
2: k 2
3: tantque k < n faire
4: numroter k un sommet sans prdcesseur ou un sommet dont tous les prdcesseurs sont dj
numrots.
5: k k + 1
6: n tantque
3.4.2 Algorithme de Bellman : toujours en avant !
Lalgorithme de Bellman est un algorithme de type glouton, cest--dire que, contrairement lalgo-
rithme de Bellman-Ford, il ne revient jamais en arrire. A chaque tape, on trouve un plus court chemin
pour un nouveau sommet en se basant sur les prdcesseurs qui sont dj tous traits. Ceci est possible
grce la possibilit deectuer un tri topologique. On obtient lalgorithme suivant :
Algorithme 5 Algorithme de Bellman (plus courts chemins, graphes sans circuits)
Bellman(G, x
0
)
1: triTopo(G,x
0
)
2: Initialisation(G, x
0
)
3: pour j = 2 n faire
4: pour tout i

(j) faire
5: Relcher(G, i, j)
6: n pour
7: n pour
Pour chaque j, la boucle sur i revient chercher le minimum des distances obtenues en passant par chacun
des prdcesseurs de j.
Nous allons illustrer lalgorithme sur un exemple. Les rsultats seront prsents sous la forme dun
tableau.
3.5. Algorithme de Dijkstra 17
Exemple 3.4.1. Nous cherchons les plus courts chemins du sommet B sans prdcesseur vers tous les
autres sommets dans le graphe sans circuit de la gure 3.5.
A
B
8

C
5

~
~
~
~
~
~
~
1

@
@
@
@
@
@
@
D
3

Figure 3.5 Graphe sans circuit possdant un sommet sans prdcesseur (B).
On commence par eectuer un tri topologique du graphe :
on numrote 1 le sommet B qui est sans prdcesseur
il ny a plus de sommets sans prdcesseur, en revanche, le sommet C a ses prdcesseurs dj
numrots (il na que B). On le numrote donc 2.
le sommet D a alors tous ses prdcesseurs numrots, on le numrote 3
il reste le sommet A, quon numrote 4.
On obtient donc le graphe renumrot suivant :
4
1
8

2
5

>
>
>
>
>
>
>
3
3

Le droulement de lalgorithme est explicit dans le tableau suivant :


j i

(j) (i) +v(i, j) (j) (j)


1 - - 0 null
2 1 2 2 1
3 1 6 3 2
2 3
4 1 8 6 3
2 7
3 6
3.5 Algorithme de Dijkstra
Lalgorithme de Dijkstra, contrairement celui de Bellman, sapplique aux graphes dont les valuations
sont positives. En revanche, le graphe peut comporter des circuits.
Cest galement un algorithme glouton : chaque tape un nouveau sommet i sera marqu (les
valeurs (i) et (i) seront alors dnitives), puis on utilisera la technique de relchement an damliorer
les chemins menant aux successeurs de i.
18 Recherche de plus court chemin
Ce nouveau sommet marqu sera choisi comme celui dont la valeur du chemin depuis x
0
est minimale
parmi tous les sommets non encore marqus. En eet, on est alors assur que les rsultats pour ce sommet
ne pourront tre amliors car
les chemins passant par des sommets dj tous marqus ont t pris en compte dans la valeur
actuelle de (i),
un chemin passant par un sommet non encore marqu sera ncessairement de poids suprieur
puisquon a choisi i tel que (i) est minimal et que les valuations des arcs sont positives.
Algorithme 6 Algorithme de Dijkstra (plus courts chemins, valuations positives)
Dijkstra(G, x
0
)
1: Initialisation(G, x
0
)
2: E [E est lensemble des sommets marqus]
3: tantque E = S faire
4: i un sommet non marqu tel que (i) est minimal
5: marquer le sommet i
6: pour tout j
+
(i) faire
7: si j nest pas marqu alors
8: Relcher(G, i, j)
9: nsi
10: n pour
11: E E {i}
12: n tantque
Nous allons illustrer lalgorithme sur un exemple. Les rsultats seront prsents sous la forme dun
tableau.
Exemple 3.5.1. Nous cherchons les plus courts chemins du sommet A vers tous les autres sommets dans
le graphe de valuations positives de la gure 3.6.
C
1

A
1

B
2

@
@
@
@
@
@
@
D
3

Figure 3.6 Graphe sans circuit possdant un sommet sans prdcesseur (B).
Le droulement de lalgorithme est explicit dans le tableau suivant (les sommets marqus sont enca-
drs, ils ne sont alors plus modis) :

i j
+
(i) (i) +v(i, j) A B C D A B C D
init. - - 0 + + + null null null null
A B 3 - 3 1 6 - A A A
C 1
D 6
C B 2 - 2 - 6 - C - A
B D 3 - - - 3 - - - B
3.6. Comparaison des algorithmes 19
3.6 Comparaison des algorithmes
Le tableau ci-dessous rcapitule les graphes sur lesquels chaque algorithme peut sappliquer ainsi que
leur complexit. On notera n le nombre de sommets et p le nombre darcs du graphe.
Algorithme type de graphe complexit
Bellman-Ford tout type de graphe O(np)
(dtecte mme un ventuel circuit absorbant)
Bellman graphe sans circuit O(n
2
)
Dijkstra graphe de valuation positive O(n
2
+p) = O(n
2
)
La complexit de lalgorithme de Dijkstra peut tre amliore en choisissant une structure de donnes
plus perfectionne (tas ou mieux : le de bonacci).
Certains algorithmes peuvent facilement tre adapts pour chercher les plus longs chemins : cest le cas
des algorithmes de Bellman et de Bellman-Ford. En revanche, ce nest pas possible pour celui de Dijkstra.
20 Recherche de plus court chemin
Partie 4
Arbre couvrant de poids minimal
4.1 Dnitions et proprits
Dnition 4.1.1. On dnit les types de graphes suivants :
Un arbre est un graphe non orient, connexe, sans cycle.
Une fort est un graphe non orient sans cycle.
Dans un arbre, une feuille est un sommet de degr 1.
Les composantes connexes dune fort sont donc des arbres.
Le thorme suivant fournit plusieurs caractrisations alternatives des arbres.
Thorme 4.1.1. Soit G un graphe non orient n sommets. Les propits suivantes sont quivalentes :
1. G est un arbe
2. deux sommets quelconques de G sont joints par une chane et une seule
3. G est connexe et a n 1 artes
4. G est connexe et si on supprime une arte, le graphe obtenu nest plus connexe
5. G est sans cycle et a n 1 artes
6. G est sans cycle et lajout de nimporte quelle arte cre un cycle
On rencontre galement des arbres particuliers dans lesquels un sommet est distingu et les arcs son
orients de ce sommet vers les autres :
Dnition 4.1.2. Une arborescence est un graphe orient muni dun sommet particulier r appel racine
tel que
le graphe obtenu en oubliant lorientation est un arbre
tout sommet dirent de r peut tre atteint par un chemin partant de r
Exemple 4.1.1. Lexemple de la gure 4.1 montre direntes arborescences obtenues partir dun mme
arbre en fonction de la racine choisie.
On peut caractriser une arborescence via la proposition suivante :
Proposition 4.1.1. Un graphe orient est une arborescence si
il est connexe
il a un unique sommet sans prdcesseur (la racine)
tous ses autres sommets ont exactement un prdcesseur.
21
22 Arbre couvrant de poids minimal
6
>
>
>
>
>
>
>
4

2 3
5
(a)
6 4
1
>
>
>
>
>
>
>

3
5
(b)
6

>
>
>
>
>
>
>
4
1

3
5
(c)
Figure 4.1 (a) un arbre. (b) une arborescence obtenue partir de larbre (a) en choisissant le sommet
2 comme racine. (c) une arborescence obtenue partir de larbre (a) en choisissant le sommet 6 comme
racine.
4.2 Arbre couvrant de poids minimal
Supposons quon souhaite mettre en place un rseau informatique entre les villes A, B, C, D, E et F.
Une estimation des cots dinstallation entre certaines de ces villes a donn les valeurs suivantes :
B
4
3
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
2
A
1
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
Figure 4.2 Estimation des cots de cablage entre les villes A, B, C, D, E et F
On souhaite choisir les liaisons eectuer an que toutes les villes soient relies au rseau tout en
minimisant le cot total.
Dnition 4.2.1. Soit G un graphe orient ou non. Un arbre couvrant est un sous-graphe de G (i.e.
contenant tous les sommets) qui est un arbre. Si le graphe est valu, on dnit le poids de larbre couvrant
comme la somme des poids de ses artes (ou arcs dans le cas orient).
Un arbre tant connexe, on peut dterminer si un graphe G est connexe en essayant de construire un arbre
couvrant pour G. Pour cela, on peut faire un parcours en profondeur ou en largeur du graphe (voir TD).
Dnition 4.2.2. Soit G un graphe valu non orient connexe. Un arbre couvrant de poids minimal est
un arbre couvrant dont le poids est le plus petit possible parmi les arbres couvrants de G.
Nous allons tudier deux algorithmes qui permettent de dterminer un arbre couvrant de poids minimal
pour un graphe G non orient connexe donn.
Ces deux algorithmes sont de type glouton. Dans chaque cas, on va construire larbre couvrant petit
petit, en sassurant chaque tape :
que lon reste couvrant sans cycle (algorithme de Kruskal)
que lon reste connexe sans cycle (algorithme de Prim)
4.3. Algorithme de Kruskal 23
4.3 Algorithme de Kruskal
Principe On construit un sous-graphe en ajoutant des artes une par une. A chaque tape, on cherche
larte de plus petite valuation parmi celles que lon na pas dj explores. Si elle ne cre pas de cycle,
on lajoute au sous-graphe, sinon on la laisse de ct. On termine ds que lon a slectionn n 1 artes
ou quil ne reste plus dartes ne crant pas de cycle.
Algorithme 7 Algorithme de Kruskal (arbre couvrant de poids minimal)
Kruskal(G(S,A,v))
1: A = ensemble des artes du graphe G
2: F = (ensemble des artes de larbre couvrant)
3: Trier lensemble A des artes de G par valuations croissantes
4: pour a A faire
5: si F {a} est acyclique alors
6: F = F {a}
7: nsi
8: n pour
Exemple 4.3.1. Nous allons appliquer lalgorithme de Kruskal au problme de rseau illustr par la
gure 4.2. La premire tape consiste trier les artes par valuations croissantes. On obtient la liste
ordonne suivante :
(A,B) (B,D) (E,F) (C,D) (A,D) (B,E) (C,F) (D,E) (A,C) (D,F)
1 2 3 3 3 4 5 6 7 10
On construit larbe couvrant en prenant les artes les unes aprs les autres dans lordre et en les ajoutant
larbre si elles ne crent pas de cycle.
B
4
2
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(a) tape 1
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(b) tape 2
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(c) tape 3
On peut noter qu ltape 3, on a le choix entre (E, F) et (C, D), mais le poids de larbre obtenu sera
bien identique. En revanche, on ne peut pas ajouter larte (A, D) qui formerait un cycle dans le graphe.
On continue avec larte (C, D) et ainsi de suite :
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
~
~
~
~
~
~
~
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(d) tape 4
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
~
~
~
~
~
~
~
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(e) tape 5
24 Arbre couvrant de poids minimal
4.4 Algorithme de Prim
Principe On construit un sous-graphe en ajoutant artes et sommets les uns aprs les autres. A chaque
tape, on cherche larte sortante de plus petite valuation. Une arte est sortante si elle joint un sommet
du sous-graphe un sommet qui nest pas dans le sous-graphe. On termine ds que lon a slectionn
n 1 artes.
Algorithme 8 Algorithme de Prim (arbre couvrant de poids minimal)
Prim(G(S,A,v))
1: A = ensemble des artes du graphe G
2: F = (ensemble des artes de larbre couvrant)
3: M = {x
0
} (on marque un sommet quelconque de G)
4: tantque il y a des artes sortantes de M faire
5: chercher larte sortante a = (x, y) de plus petite valuation (x M et y / M)
6: M = M {y}
7: F = F {a}
8: n tantque
Exemple 4.4.1. Nous allons appliquer lalgorithme de Prim au mme problme que prcdemment. Par-
tons par exemple du sommet A. An de visualiser le droulement de lalgorithme, nous reprsenterons les
artes de larbre couvrant par des artes doubles, les artes sortantes par des artes simples et les autres
artes en pointill.
La premire tape consiste choisir larte partant de A de valuation minimale : cest larte (A, B).
On lintgre donc larbre couvrant puis on cherche larte de valuation minimale parmi les artes qui
sortent du sous-ensemble de sommets {A, B}. On continue le procd jusqu avoir les (n 1) artes.
B
4
2
E
6
3
A
1
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
5
F
10
(a) tape 1
B
4
2
@
@
@
@
@
@
@
E
6
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
5
F
10
(b) tape 2
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
@
@
@
@
@
@
@
D
C
3
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(c) tape 3
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
~
~
~
~
~
~
~
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
D
C
3
~
~
~
~
~
~
~
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(d) tape 4
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
D
C
3
~
~
~
~
~
~
~
~
~
~
~
~
~
~
5
F
10
@
@
@
@
@
@
@
(e) tape 5
B
4
2
@
@
@
@
@
@
@
@
@
@
@
@
@
@
E
6
3
A
1
~
~
~
~
~
~
~
~
~
~
~
~
~
~
3
7
D
C
3
~
~
~
~
~
~
~
~
~
~
~
~
~
~
5
F
10
(f) tape 6
Partie 5
Flot dans un rseau de transport
5.1 Rseau de transport
Dnition 5.1.1. Un rseau de transport R = (S, A, s, p, c) est un graphe orient G = (S, A)
1. sans circuit
2. muni dune source : un sommet s S tel que d

(s) = 0
3. muni dun puits : un sommet p S tel que d
+
(s) = 0
4. dont chaque arc u A est valu par une capacit c(u) 0
c : A R
+
5. il existe au moins un chemin de s vers p.
Les capacits sont habituellement notes entre crochets.
Exemple 5.1.1. Le graphe suivant est un rseau de transport.
b
[2]

>
>
>
>
>
>
>
>
s
[2]

[1]

?
?
?
?
?
?
?
?
p
a
[1]

[2]








Figure 5.1 Un rseau de transport
Ce type de graphe permet de modliser de nombreuses situations :
Rseau routier ; les capacits reprsentent le nombre maximal de voitures par heure
Rseau de distribution deau, lectricit, etc. ; les capacits reprsentent alors le dbit maximal
pouvant tre fourni par chaque partie du rseau.
Le problme qui nous intresse est alors doptimiser le parcours global du rseau en tenant compte des
contraintes donnes par les capacits limites de chaque partie du rseau.
25
26 Flot dans un rseau de transport
5.2 Flot dans un rseau de transport
Dnition 5.2.1. Soit un rseau de transport R = (S, A, s, p, c). Un ot sur R est une application
f : A R
+
vriant :
1. u A, f(u) c(u)
2. x S, x = s, x = p,

(x)
f(z, x)

ot entrant en x
=

y
+
(x)
f(x, y)

ot sortant de x
On appelle alors valeur du ot f la quantit
v(f) =

x
+
(s)
f(s, x) =

y

(p)
f(y, p)
Exemple 5.2.1. On indique sur chaque arc la valeur du ot ct de la capacit. Le graphe ci-dessous
reprsente un ot dans le rseau de transport de lexemple 5.1.1.
b
2[2]

>
>
>
>
>
>
>
>
s
1[2]

1[1]

?
?
?
?
?
?
?
?
p
a
1[1]

0[2]








Figure 5.2 Un ot dans un rseau de transport
On vrie quen chaque sommet, la somme des ots des arcs entrants est gale la somme des ots
des arcs sortants. La valeur du ot est, de faon quivalente, le ot sortant de s ou le ot entrant de p.
Ici, v(f) = 2.
Un arc u est dit satur par le ot si f(u) = c(u). Dans lexemple ci-dessus, les arcs (s, a), (a, b) et (b, p)
sont saturs.
5.3 Coupes
Dnition 5.3.1. Une coupe sur un rseau de transport R = (S, A, s, p, c) est un sous-ensemble X de S
vriant :
1. s X
2. p / X
On note souvent (X, X) une coupe, X tant le complmentaire de X dans S. On dnit alors la
capacit dune coupe comme la somme des capacits des arcs allant de X vers X.
5.4. Chemin augmentant / Chane augmentante 27
Dnition 5.3.2. La capacit de la coupe X est
C(X, X) =

(x,y)A
xX,yX
c(x, y)
Il est clair quun ot ne pourra pas avoir une valeur suprieure la capacit dune coupe. La recherche
dune coupe de capacit la plus petite possible nous permettra donc de connatre les limites du rseau.
Exemple 5.3.1. Les coupes possibles et leurs capacits respectives pour le rseau de lexemple 5.1.1 sont :
X X C(X, X)
{s} {a, b, p} 3
{s, a} {b, p} 5
{s, b} {a, p} 3
{s, a, b} {p} 4
Thorme 5.3.1. Soit R = (S, A, s, p, c) un rseau de transport. Pour tout ot f sur R et toute coupe
X sur R, on a
v(f) = f(X, X) f(X, X)
o f(X, X) =

(x,y)A
xX,yX
f(x, y) et f(X, X) =

(x,y)A
xX,yX
f(x, y).
Consquence : v(f) C(X, X).
En particulier, si f

et X

vrient v(f

) = C(X

), alors f

est un ot de valeur maximale parmi


tous les ots sur R, et X

est une coupe de capacit minimale parmi toutes les coupes sur R.
Question : Comment calculer concrtement un ot de valeur maximale ainsi quune coupe de capacit
minimale associe ?
5.4 Chemin augmentant / Chane augmentante
Ide : (1) Considrons une nouvelle fois le rseau de transport de lexemple 5.1.1. On commence par y
faire passer le ot nul, puis on remarque que pour chaque arc u du chemin s, a, b, p, on a f(u) < c(u).
b
0[2]

>
>
>
>
>
>
>
>
>
>
>
>
>
>
s
0[2]

0[1]

?
?
?
?
?
?
?
?
?
?
?
?
?
?
p
a
0[1]

0[2]








(a) un chemin augmentant...
b
1[2]

>
>
>
>
>
>
>
>
s
0[2]

1[1]

?
?
?
?
?
?
?
?
p
a
1[1]

0[2]








(b) ...qui permet daugmenter le ot
Figure 5.3 Un chemin augmentant permet daugmenter la valeur du ot
28 Flot dans un rseau de transport
On peut donc augmenter la valeur du ot sur chaque arc de ce chemin. On peut ensuite faire la mme
chose avec le chemin s, b, p, on obtient alors le ot suivant :
b
2[2]

>
>
>
>
>
>
>
>
s
1[2]

1[1]

?
?
?
?
?
?
?
?
p
a
1[1]

0[2]








Figure 5.4 Flot obtenu aprs deux augmentations
Il ny a plus de tel chemin et nous avons trouv un ot de valeur 2. Peut-on cependant encore amliorer
le ot ?
(2) La rponse est oui, comme le prouve le ot suivant, de valeur 3 :
b
2[2]

>
>
>
>
>
>
>
>
s
2[2]

1[1]

?
?
?
?
?
?
?
?
p
a
0[1]

1[2]








Figure 5.5 Nouvelle amlioration du ot
An de trouver ce type damlioration, il sut de rechercher ce quon va appeler une chane augmen-
tante, cest--dire une chane de s vers p telle que les arcs pris dans le bon sens peuvent tre augments et
les arcs pris lenvers peuvent tre diminus. Dans lexemple ci-dessus, cest le cas de la chane s, b, a, p
puisque les arcs (s, b) et (a, p) ntaient pas saturs et larc (a, b), pris lenvers, avait une valeur positive.
Dnition 5.4.1. Soit R = (S, A, s, p, c) un rseau de transport et f un ot sur R.
Un chemin C(s, p) qui relie la source au puits par des arcs u tels que f(u) < c(u) est appel chemin
augmentant.
(on peut alors augmenter le ot de 1 sur chaque arc du chemin)
Une chane C(s, p) qui relie la source au puits par des artes u vriant :
f(u) < c(u) si larte est oriente dans le sens s vers p
f(u) > 0 si larte est oriente dans le sens p vers s
est appele chane augmentante.
(on peut alors augmenter le ot de 1 sur les artes allant de s vers p et le diminuer de 1 sur les
artes allant dans lautre sens)
5.5 Flot complet / Flot maximal
Dnition 5.5.1. Un ot sur un rseau de transport est dit
complet sil nadmet pas de chemin augmentant
maximal sil nadmet pas de chane augmentante
Lalgorithme de Ford-Fulkerson permet de trouver un ot complet et un ot maximal pour un rseau
de transport donn.
5.5. Flot complet / Flot maximal 29
Algorithme 9 Algorithme de Ford-Fulkerson (recherche de ot complet/maximal)
Ford-Fulkerson(R(S,A,s,p,c))
1: initialiser le ot 0 sur chaque arc
2: tantque il existe un chemin augmentant de s p faire
3: augmenter le ot
4: n tantque
5: (le ot obtenu cette tape est un ot complet)
6: tantque il existe une chane augmentante de s p faire
7: augmenter le ot
8: n tantque
9: (le ot obtenu cette tape est un ot maximal)
Il faut toujours commencer par les chemins augmentants, jusqu ce quil ny en ait plus.
Le thorme suivant permet de trouver une coupe de capacit minimale associe un ot maximal.
Thorme 5.5.1. Soit f un ot maximal dans un rseau de transport. Alors
X = {s} {x S | il existe une chane augmentante de s x}
est une coupe de capacit minimale.
30 Flot dans un rseau de transport
Partie 6
Thorie des langages
6.1 Mots, langages et expressions rgulires
Dnition 6.1.1. tant donn un ensemble ni de symboles , appel alphabet, on appelle mot toute
squence nie (ventuellement vide) dlments de . Le mot vide est not . Lensemble de tous les mots
forms partir de lalphabet est not

. Un langage sur est un sous-ensemble de

.
6.1.1 Concatnation
Soient u, v

, on note u.v ou uv la juxtaposition des symboles de u et des symboles de v. Cette


opration sappelle la concatnation.
on a .u = u. = u
soit n N, alors on note u
n
= u.u. . . u concatn n fois
Exemple 6.1.1. soit = {a, b, c}, alors , a, abaac, a
3
= aaa

mais pas abdba.


La concatnation des mots u = abcc et v = abba est le mot uv = abccabba.
6.1.2 Oprations sur les langages
Soient L
1
, L
2
et L des langages sur . On dnit :
la runion L
1
L
2
= {u

; u L
1
ou u L
2
}
lintersection L
1
L
2
= {u

; u L
1
et u L
2
}
la concatnation L
1
.L
2
= {u.v

; u L
1
et v L
2
}
ltoile de Kleene L

=
i0
L
i
Un des intrts de ces notations est quelles permettent dexprimer de manire formelle des langages
complexes, ventuellement innis, partir de langages simples.
Exemple 6.1.2. Lensemble des suites de 0 et de 1 contenant la squence 111 scrira :
{0, 1}

.111.{0, 1}

31
32 Thorie des langages
6.1.3 Langages rationnels
On distingue 3 oprations que lon qualiera de rationnelles : , . et
Dnition 6.1.2. Soit un alphabet ni. Les langages rationnels sur sont dnis inductivement par :
(i) {} et sont des langages rationnels,
(ii) a , {a} est un langage rationnel,
(iii) Si L
1
et L
2
sont des langages rationnels, alors L
1
L
2
, L
1
.L
2
et L

1
sont des langages rationnels.
Un langage rationnel peut toujours tre donn par une expression rationnelle, cest--dire une formule
constitue de symboles de et des oprations , . et .
Exemple 6.1.3. Le langage des mots sur {0, 1} contenant la squence 111 est donn par lexpression
rgulire (0 1)

.1.1.1.(0 1)

que lon notera de faon plus compacte :


{0, 1}

.111.{0, 1}

Rciproquement, un langage que lon peut dcrire avec une expression rationnelle est un langage
rationnel.
6.2 Automates nis
6.2.1 Dnitions
Dnition 6.2.1. Un automate ni A est un quintuplet A = (, E, D, F, ) o :
est un alphabet,
E est un ensemble ni dtats,
D E est un ensemble dtats de dpart,
F E est un ensemble dtats de n,
est un sous-ensemble de E E appel ensemble des transitions.
On reprsente les automates laide dun graphe.
Exemple 6.2.1. = {a, b}, E = {1, 2}, D = {1, 2}, F = {2}
et = {(1, a, 1), (1, a, 2), (2, b, 2), (2, b, 1)}
Dnition 6.2.2. Soit (p, x, q) une transition, p est lorigine, x ltiquette et q lextrmit de la transition.
Un chemin est une suite de transitions successives.
- Il est dit acceptant sil a pour origine un tat de dpart (point par une che sur le graphe) et pour
extrmit un tat de n (doublement entour sur le graphe).
- Un mot est accept sil est ltiquette dau moins un chemin acceptant.
- Le langage L(A) reconnu par A est lensemble des mots reconnus par A.
- Deux automates sont quivalents si et seulement sils reconnaissent le mme langage.
6.2. Automates nis 33
Dnition 6.2.3. Un automate est dit dterministe si D a un seul lment et si pour tout q E et
x , il existe au plus une transition (q, x, q

).
La reconnaissance dun mot w par un automate dterministe se fait en temps |w|.
Nous verrons que tout automate peut tre rendu dterministe.
6.2.2 Automates et langages
Dnition 6.2.4. Un langage est dit reconnaissable sil existe un automate A qui reconnait ce langage.
Thorme 6.2.1. Les langages rguliers et les langages reconnaissables sont les mmes.
Une question que nous serons amens rsoudre est la recherche dun automate ni dterministe
minimal (cest--dire ayant le moins dtats possible) reconnaissant un langage donn. Nous verrons
plusieurs mthodes an dy arriver.