Theorie Des Graphes
Theorie Des Graphes
Theorie Des Graphes
Chapitre 1
Introduction
Le but de ce chapitre est de mettre en place les notions fondamentales sur les
graphes afin de partir sur des bases saines.
(
jX j = n les sommets seront numérotés de 1 à n
jE j = m les arcs seront numérotés de 1 à m
Si la notation ensembliste des graphes est la seule qui soit rigoureuse, ces der-
niers valent surtout par leur représentation graphique. En effet, soit le graphe G =
(X; E ) = (
X = f1; 2; 3; 4g
E = f(1; 2) ; (2; 1) ; (2; 2) ; (2; 3) ; (2; 3) ; (4; 3) ; (4; 1)g
2
Ce même graphe peut être associé aux deux représentations suivantes et même
d’autres. Du coup, n’oubliez jamais la règle suivante :
Ne vous fiez pas à l’aspect visuel de deux graphes pour les comparer.
Seule la comparaison des ensembles de sommets et d’arcs est fiable !
1 2 c 1 3
b
b
g d e g d e
a
f
4 3 4 2
Par exemple, dans le graphe de la figure (1.1), les sommets 1 et 4 sont adjacents
(grâce à l’arc (4; 1)), alors que les sommets 2 et 4 ne le sont pas.
Par exemple, le graphe de la figure (1.1) n’est pas un graphe simple car il contient
à la fois la boucle (2; 2) et 2 arcs (2; 3).
Remarque : Il existe une bijection entre l’ensemble des graphes simples et l’en-
sembles des relations binaires sur X , les propriétés sur les relations s’étendant donc
aux graphes.
1.5 Définition (Graphe planaire)
On qualifie de planaire tout graphe pouvant être dessiné sans que ses arcs ne se
croisent.
Une fois de plus, il convient de ne pas oublier qu’il ne faut jamais se fier à la repré-
sentation visuelle d’un graphe. Par exemple, le graphe de la figure suivante n’apparaît
pas planaire sur sa représentation de gauche. Toutefois, si vous modifiez sa représen-
tation graphique comme montré à droite il est évident qu’il est bel et bien planaire.
4
Le vocabulaire change un peu : on appelle habituellement arête un arc dans le cas
non orienté.
Soit G = (X; E ) un graphe orienté. On appelle cocycle d’un sommet l’ensemble des
sommets qui lui sont adjacents ou l’ensemble des arcs qui lui sont incidents. On note :
8 ,+ (i) = fj 2 X j(i; j ) 2 E g
>
>
< ,, (i) = fk 2 X j(k; i) 2 E g
>
: !!, ((ii))
>
+ = f(i; j ) 2 E g
= f(k; i) 2 E g
Les cocycles , sont des cocycles de sommets, alors que les cocycles ! sont des co-
cycles d’arcs. Les deuxièmes se révèlent beaucoup plus utiles dans le cas général.
En gros, le demi degré extérieur compte le nombre d’arcs qui sortent d’un sommet
alors que le demi degré intérieur compte le nombre d’arcs qui entrent en un sommet.
5
car chaque arc possède exactement une extrémitié initiale et une extrémité finale.
D’où :
X X
d+G (i) = d,G (i) = m
i2X i2X
avec m nombre d’arcs du graphe.
Finalement :
X X
d(G) = d+G (i) + d,G (i) = 2m
i2X i2X
La matrice d’incidence est de taille n m, les sommets sont associés aux lignes, les
A
arcs aux colonnes. Notons i (G) la matrice d’incidence associée au graphe G = (X; E ).
Pour pouvoir l’écrire, nous devons numéroter les arcs du graphe. On obtient alors :
8
>
<1 si le sommet i est le sommet initial de l’arc j
aij = > ,1 si le sommet i est le sommet terminal de l’arc j
:0 partout ailleurs
Cette notation est très lourde car la matrice est très creuse. En effet sur une même
colonne seuls deux éléments ne sont pas nuls : ceux qui correspondent au sommet ini-
tial (1) et au sommet terminal (-1) de l’arc. Sur une même ligne, le nombre d’éléments
égal à 1 nous donne le demi degré supérieur alors que le nombre d’éléments égal à -1
nous indique le demi degré inférieur du sommet.
Dans le cas non orienté, on ne place que des 1 et la somme d’une ligne indique le
degré du sommet.
Cette matrice est inexpoitable du point de vue algorithmique mais elle est extrè-
mement importante du point de vue théorique car elle permet de faire le lien, par
exemple, entre la théorie des flots et la programmation linéaire.
6
1.4.2 Matrice d’adjacence sommet-sommet
C’est une matrice n n telle que aij = 1 pour tout arc (i; j ) appartenant au graphe,
tous les autres éléments étant nuls. Lorsqu’un graphe est dense, c’est à dire lorsque
m est proche de n2, cette matrice constitue un moyen de stockage efficace au point de
vue place mémoire mais elle s’avère délicate à utiliser algorithmiquement.
Dans le cas non orienté, la matrice d’adjacence est symétrique. En effet, pour la
construire on considère chaque arête du graphe comme 2 arcs opposés, lesquels ser-
vent de base à la construction de la matrice.
Nous allons expliciter les deux matrices sur le graphe suivant. Afin d’éviter toute
ambiguité entre les sommets et les arcs ces derniers ont été «numérotés» par des
lettres.
2
d
a
1 c 4
b
e
3
F IG. 1.3: Graphe d’exemple pour l’expression des matrices d’incidence et d’adjacence
a b c d e 1 2 3 4
1 1 1 0 0 0 1 0 1 0 0
2 ,1 0 1 1 0 2 0 0 1 1
3 0 ,1 ,1 0 1 3 0 0 0 1
4 0 0 0 ,1 ,1 4 0 0 0 0
Incidence Adjacence
7
1.5 Chemins, Chaînes, Circuits, Cycles
Les notions de chemin et de circuit dans les graphes orientés ainsi que leurs homo-
logues dans les graphes non orientés, respectivement chaîne et cycle, sont absolument
fondamentales.
Après les définitions générales de ces notions, nous examinerons 2 cas particuliers
des plus intéressants.
2
d
a
1 c 4
b
e
3
De manière plus littéraire, un chemin est une succession d’arcs qui permet de
relier un sommet s à un sommet t en empruntant chaque arc dans le bon sens, c’est à
dire de son origine vers sa destination.
8
Si l’on relache cette dernière contrainte, c’est à dire que l’on s’autorise à emprunter
un arc à l’endroit ou à l’envers, on parle alors de chaîne.
La notion de chaîne est la seule à avoir une signification dans le cas des graphes
non orientés.
La figure (1.5) illustre la notion de chaîne. Dans ce cas, on voit clairement que l’arc
c est parcouru à contre-courant.
2
d
a
1 c 4
b
e
3
La figure suivante illustre ces deux notions. Notez l’inversion du sens de l’arc d
entre les deux dessins.
1.10 Définition (Chemin simple)
Un chemin qui ne passe qu’une seule fois par chacun des arcs qu’il emprunte est dit
simple
9
2 2
d
d
a a
1 c 4 1 c 4
b b
e e
3 3
Cycle Circuit
Ces deux types particuliers de chemin et de cycle, que l’on retrouve dans les cas
orientés ou non orientés sont particulièrement intéressants car on les retrouve dans
de nombreux problèmes appliqués.
10
L’application industrielle la plus spectaculaire est connue sous le nom de problème
du postier chinois et consiste à chercher le circuit Eulérien de longueur minimale sur
un graphe aux arcs valués.
4
d i
h
a
1 2
c
b
5 e 6
3
f
g
F IG. 1.7: Graphe de base pour l’illustration des graphes partiels et sous graphes
11
4 4
d i d
h h
a a
1 2 1 2
c
b
5 e 6 5 6
3 3
f f
g g
Sélection d’arcs (en gras) Graphe partiel obtenu
Les raisons de travailler sur des graphes partiels sont légion. Par exemple, l’on
pourrait vouloir se limiter aux arcs présentant certaines caractéristiques importantes.
Considérons un problème de recherche d’itinéraires où chaque axe routier est repré-
senté par un arc. Si l’on ne désire emprunter que des autoroutes, on peut extraire le
graphe partiel associé aux autoroutes.
12
4
d i
h
a
1 2
a
c 1 2
b
5 e 6 b
3 e
f
g 3
Deux sous graphes particuliers ont une importance toute particulière dans le monde
de la théorie des graphes : les cliques et les stables. Comme nous allons le voir immé-
diatement, ces deux notions sont totalement opposées.
1.16 Définition (Clique)
On appelle clique sur un graphe G tout sous graphe complet.
1.17 Définition (Stable)
Un stable sur un graphe G est un sous graphe sans arc.
13
Chapitre 2
Arbres et parcours
2.1 Définition
Un arbre est un graphe connexe et sans cycle (propriété 0).
3. Un arbre est un graphe sans cycle tel que si l’on rajoute un arc quelconque, on
crée un cycle
4. Un arbre est un graphe connexe tel que la suppression d’un arc quelconque en-
gendre la séparation en 2 composantes connexes. On parle de graphe connexe
maximal
5. Dans un arbre, tout couple de sommets est relié par une et une seule chaîne.
14
2.1.2 Démonstration de l’équivalence des définitions sur les
arbres
En effet, considérons un graphe G = fX; E g, jX j = n dont l’on retire tous les arcs.
On ajoute alors les arcs 1 par 1.
A un instant donné, la situation peut être telle que représentée par la figure (2.1).
15
(a)
(b)
16
Une fois le théorème démontré, les implications suivantes sont évidentes :
8(0) ) (1)
>
>
<(0) ) (2)
>
:(1)
> ) (4)
(2) ) (3)
Pour démontrer l’équivalence des propriétés sur les arbres, nous allons créer la
boucle d’implications suivante (les implications non encore démontrées sont en
gras) :
8(0) ) (2)
>
>
>
> (2) ) (3)
<(3) ) (1)
>
> (1) ) (4)
>
:((45)) )
> (5)
) (0)
Démonstration 3)1
Supposons que H soit un arbre non connexe. Il possède donc au moins 2 compo-
sants connexes. En appliquant la règle de construction numéro 2, il est possible
d’ajouter un arc sans créer de cycle, ce qui entraîne une contradiction.
Moralité : un arbre est un graphe connexe et sans cycle qui possède exactement
,
n 1 arcs.
Démonstration 4)5
Supposons qu’il existe deux chaînes distinctes permettant de joindre un couple
de sommets (i; j ). Alors, il existe au moins un arc (k; l) appartenant à la pre-
mière chaîne mais pas à la seconde. Supprimons cet arc, il existe encore une
chaîne permettant de joindre i à j . Le graphe est toujours connexe après sup-
pression d’un arc ce qui contredit la proposition 4.
Démonstration 5)0
Supposons qu’il existe un cycle, alors, il est possible d’obtenir 2 chaînes reliant
chaque sommet du cycle à un autre.
En outre, l’existence d’une chaîne permettant de relier chaque couple du graphe
est la définition même de la propriété de connexité.
17
Ainsi se termine la démonstration d’équivalence des propriétés d’un arbre !
2.1 Corollaire
Ajouter un arc à un arbre créée un et un seul cycle
2.2 Corollaire
Tout graphe connexe contient un graphe partiel qui est un arbre.
C’est un abus de langage commun que d’appeler arbre une arborescence. La figure
suivante illuste 2 arbres, l’un est une arborescence, l’autre non.
Arborescence Arbre
18
Chapitre 3
3.1 Notations
Ce chapitre suppose que l’on travaille sur un graphe orienté G = (X; E ), avec
jX j j j
= n et E = m. Chaque arc (i; j ) est muni d’un coût cij .
Dans la suite on notera Pts un chemin depuis un sommet s (la source) vers un
sommet t (la destination).
3.1 Définition (Longueur d’un chemin)
On appelle longueur d’un chemin P et on note l(P ) la quantité
X
l(P ) = cij (3.1)
(i;j )2P
Un chemin d’un sommet vers lui même sera toujours de longueur nulle.
En clair, cela revient à valuer, ou porter une valeur, sur chacun des sommets du
graphe.
19
3.1 Remarque (Représentation d’un chemin)
Il existe deux grandes manières de représenter un chemin. La première consiste à
donner la suite des arcs qui le composent. Ainsi, un chemin Pts peut s’écrire :
Pts = ((s = i1; i2) ; (i2; i3) ; (i3; i4) ; : : : ; (ip,1; ip = t))
Plus simplement, et comme nous ne travaillons que sur des graphes simples, on
peut noter un chemin par la succession des sommets rencontrés. Ainsi, le chemin
précédent peut désormais s’écrire :
3.2 Le problème
1. Il existe un chemin depuis un sommet s vers tous les autres sommets du graphe.
20
3.1 Propriété (Propriété de sous optimalité)
Soit Pts = (s = i1; i2 ; i3; : : : ; ip,1; ip = t) un plus court chemin de s vers t. Alors,
8 2 ,
j 2::p 1, le sous chemin Pisj = (s = i1; i2; : : : ; ij ) est un plus court chemin de s vers
ij .
En effet, soit P un plus court chemin de s vers t passant par le sommet k . Appelons
P1 le sous chemin de s à k et P3 le sous chemin de k à t. On a P = P1 P3. Supposons [
6
que P1 ne soit pas optimal. Alors il existe un chemin P2 = P1 entre s et k tel que
[
l(P2) < l(P1). Dans ce cas P2 P3 est un chemin de s vers t de longueur inférieure à
[
celle de P1 P3 = P ce qui contredit l’hypothèse.
P1
s k P3 t
P2
– Par application de la propriété précédente, d(i) = l(Pis ) pour chacun des som-
2
mets i P , où Pis est la restruction de P entre s et i.
Or, par hypothèse, pour tout arc (i; j ) 2 P , d(j ) = d(i) + cij ou, pour ce qui nous
concerne ici : cij = d(j ) , d(i) Ce qui nous donne :
X X
d(t) = d(j ) , d(i) = cij = l(P )
(i;j )2P (i;j )2P
Selon les caractéristiques du graphe que l’on étudie, il existe 3 grandes familles de
recherche de plus courts chemins depuis un sommet s vers tous les autres sommets
du graphe.
Lorsqu’un graphe ne comporte pas de circuit, les arcs traduisent une relation
d’ordre partiel sur le graphe. Ce qui veut dire que l’on peut numéroter les sommets
de G de telle manière que (i; j ) 2 )
G i < j . Une telle numérotation s’appelle un tri
topologique sur G. Le calcul d’un tri topologique (ou ordre topologique) sur un réseau
se fait par un algorithme de complexité maximale en O(m).
Dès lors qu’il existe un circuit sur le graphe, il devient impossible de créer un tel
ordre car tout sommet membre d’un circuit est l’un de ses propres prédécesseurs.
22
L’algorithme suivant permet de déterminer un ordre topologique sur un graphe.
8 i 2 X (i) 0
8 (i; j ) 2 G (j ) (j ) + 1
Liste fi 2 X = (i) = 0g
suivant 0
Tant Que (Liste = ) 6 ;
Retirer un sommet i de la liste
suivant suivant + 1
ordre[i] suivant
8 (i; j ) 2 !+ (i)
(j ) (j ) , 1
Si ( (j ) = 0)
Alors
Liste Liste j [f g
Fin Si
Fin 8
Fin Tant Que
Si (suivant < n) Alors
Le réseau contient au moins un circuit
Sinon
Le tableau ordre indique l’ordre topologique
Fin Si
Le principe de cet algorithme est simple et repose sur l’élimination progressive des
arcs sortant de chaque sommet. Nous utilions les variables (i) indiquant à chaque
instant, combien d’arcs non encore biffés du réseau entrent dans le sommet i. Initiale-
j j8 2
ment, (i) = !, (i) , i X et la liste contient l’ensemble des sommets qui n’ont pas
de prédécesseurs et qui sont donc directement numérotables. A chaque fois que l’on
examine un sommet, on coupe les arcs qui en sortent et on place dans la liste les som-
mets qui n’ont plus d’arc entrant. Ainsi, on est sûr d’examiner tous les prédécesseurs
d’un sommet avant de le numéroter.
Une fois cet ordre topologique connu, le calcul des plus courts chemins est très
simple. En effet, supposons que l’on cherche à calculer d(k ) et que l’on connaisse les
plus courtes distances pour tous les sommets de rang topologique inférieur à celui de
k.
De par la définition de l’ordre topologique, tous les arcs arrivant en k proviennent
de sommets de rang inférieur, c’est-à-dire de sommets pour lesquels on connaît déjà
les plus courtes distances (de par l’hypothèse). Alors, pour connaître d(k ) (et, par la
23
même occasion, un plus court chemin joignant s à k ), il suffit de considérer :
j = arg (i;k
min)2G
(d(i) + cik )
d(k) = d(j ) + cjk
pred[k ] = j
Algorithme de Bellmann
d(s) 0
8 i 2 X n fsg d(i) +1
Renuméroter les sommets dans l’ordre topologique
Pour k variant de 1 à n
j arg i : (min
i; k)2X
(d(i) + cik )
d(k) d(j ) + cj k
pred[k ] j
Fin Pour
Lorsque le réseau contient des circuits, il n’est plus possible d’utiliser l’algorithme
précédent qui s’appuie sur un tri topologique. Toutefois, il est toujours possible de
tirer profit de la non négativité des coûts sur les arcs.
Les distances aux sommets fixés (c’est-à-dire les sommets de S ) sont mi-
nimales.
24
A chaque itération, le sommet temporaire de plus petite distance est transféré
directement dans S et l’on met à jour les distances de tous ses successeurs.
S ;
S X
d(s) 0
pred[s] 0
d(i) +1 8 i 2 X n fsg
Tant que (S 6= ;)
i arg min(d(j ))
j 2S
S S [ fig
S S n fig
8 (i; j ) 2 !+ (i)
Si (d(j ) > d(i) + cij )
Alors
d(j ) d(i) + cij
pred[j ] i
Fin Si
Fin 8
Fin Tant que
Démonstration de l’algorithme :
Dans le cas général, la seule solution consiste à regarder itérativement les arcs en
modifiant les distances jusqu’à ce que la condition du théorème (3.1) soit vérifiée pour
chacun d’entre eux.
25
L’algorithme général de Ford (dit Label-correcting) est le suivant :
Cet algorithme est très intéressant car il converge quelle que soit la méthode de
sélection de l’arc violant les conditions d’optimalité. Notons que cet algorithme permet
de détecter la présence d’un circuit négatif lorsqu’une distance devient inférieure à
, nC avec C = (i;j
max j j
)2G
cij .
La preuve de cet algorithme est immédiate. En effet, à l’issue de l’algorithme, il
suffit de remonter la chaîne des prédécesseurs stockée dans le tableau pred pour
obtenir des chemins de s vers tous les autres sommets du graphe uniquement consti-
tués d’arcs vérifiant la condition (3.1). Le théorème (3.2) nous garantissant que de tels
chemins sont bien des plus courts chemins de s vers les autres sommets.
26
La même remarque s’impose : la convergence est assurée quelle que soit la poli-
tique de gestion de la liste. Les performances de cet algorithme sont très intéressantes
dans deux cas particuliers :
Gestion File : C’est la forme la plus répandue car elle permet, moyennant des as-
tuces algorithmiques non négligeables que nous ne détaillerons pas ici, de dé-
tecter les circuits de coût négatif. Les sommets sont retirés dans l’ordre où ils
sont introduits dans la liste. En pratique, on insère les sommets en fin de liste
pour les retirer en tête de liste. Sa complexité est O(nm).
Gestion Dequeue : C’est l’algorithme (en pratique !) le plus performant pour ré-
soudre les problèmes de plus court chemin dans le cas général. Si l’on retire
toujours les sommets en tête de liste, ils sont insérés en fin de liste lors de leur
première insertion et en tête de liste s’ils doivent être examinés une nouvelle
fois.
Il existe une autre variante qui utilise deux listes couplées l’une à l’autre. Très
performantes, ces deux implémentations peuvent néammoins avoir un compor-
tement non polynômial sur des réseaux pathologiques.
27
Chapitre 4
Le problème de l’ordonnancement
4.1 Introduction
Soit un projet complexe composé d’un ensemble de tâches que l’on souhaite fixer
dans le temps de manière à ce que le projet se termine au plus vite.
4.2 Le problème
Les contraintes temporelles portent sur les dates de début et de fin des tâches
28
4.2.1 Les contraintes temporelles (ou contraintes de potentiel)
ti > t0i
2. La tâche i ne peut terminer après la date ti dite date d’échéance :
ti + di 6 ti
3. Contraintes de précédence, la tâche j ne peut commencer avant la fin de la tâche
i:
ti + di 6 tj
On peut généraliser ces dernières contraintes à une contrainte plus générale de
potentiel entre les tâches i et j en introduisant la quantité aij 2
R et telle que :
ti + aij 6 tj
Notons que les notations et termes Anglais sont les suivants :
(
t0i ri release time
ti di deadline
29
4.2.3 Contraintes disjonctives
Ces contraintes permettent de spécifier que 2 tâches ne peuvent pas avoir lieu en
même temps (par exemple, les entrepreneurs qui en sont chargés ne s’entendent pas).
ti + di 6 tj
tj + dj 6 ti
Aussi élégante soit elle, cette méthode n’est guère recevable car elle entraîne des
difficultés algorithmiques non négligeables. En particulier, le nombre de cas à traiter
séparément explose lorsque l’on augment le nombre de disjonctions.
De toute manière, le traitement de ces contraintes est malaisé dans le cas général.
Dans la suite de cet exposé, nous ne considérerons que des contraintes de potentiel
simples.
– 1, 2, et 4 précèdent 3
– 2 précède 5
4.2 Définition (Date au plus tôt)
On appelle Date au plus tôt et on note i la date minimum à laquelle on peut démarrer
la tâche i. Il est clair que ti > i et que tn+1 = L.
On pose 0 = 0.
30
4.3 Définition (Date au plus tard)
On appelle Date au plus tard et on note i la date maximale à laquelle on peut dé-
marrer la tâche i sans retarder l’exécution du projet ou violer une contrainte. Il est
clair que ti 6 i avec tn+1 = L.
C’est le modèle le plus ancien où l’on représente une tâche par un rectangle dont
la longueur représente la durée. L’axe horizontal représente le temps. Ce graphe n’est
d’aucune utilité pour optimiser le projet car il ne permet pas de faire apparaître les
contraintes. En revanche, il est intéressant pour suivre le projet une fois l’optimi-
sation réalisée. Il est à noter que, bien que ce diagramme soit en 2 dimensions, la
dimension verticale ne sert qu’à séparer les tâches car elle n’est associée à aucune
grandeur du problème.
Les arcs représentant les tâches ont pour coût di alors que les arcs de précédence
ont un coût nul. On rajoute deux sommets fictifs représentant respectivement les
dates de début et de fin du projet.
31
T â c h e 2
T â c h e 4 T â c h e 3
T â c h e 1 T â c h e 5
Le «réseau» PERT est très proche du diagramme de Gantt mais permet de modéli-
ser les contraintes. Il a été mis au point aux Etats-Unis pour résoudre les problèmes
liés à la construction de sous-marins nucléaires.
Tâche 1
Tâche 3
Début Fin
Tâche 2
Tâche 5
Tâche 4 Transitions
Ici les tâches sont représentées par des sommets et les arcs trahissent les contraintes
de précédence. Ainsi la contrainte i précède j est elle symbolisée par un arc entre les
sommets i et j et de longueur di .
Le graphe Potentiel-tâches est sans doute plus lourd que le réseau PERT mais il
permet de modéliser plus de contraintes et de prendre en compte des cas « tordus »
32
1 10
0
3 5
3
0
D 4 F
0
2 5 6
2 2
4.5 Résolution
En effet, si l’on recherche le plus long chemin, celui-ci va utiliser le plus grand
nombre de tâches possibles en suivant les arcs les plus longs.
Soit :
Alors :
33
2. i = pi
3. i = L , qi
Conséquence
34
Chapitre 5
Chaque nœud est doté d’une contribution au flot b(i). On appelle source tout som-
met i créant du flot, c’est à dire, tel que b(i) > 0 et puits tout sommet i; b(i) < 0 où le
flot est « consommé ».
Un flot sur le réseau G est un vecteur x 2 Rm, indicé sur les arcs, tel que :
lij 6 xij 6 uij (5.1)
X X
xjk , xij = b(j ) 8 j 2 X (5.2)
k:(j;k)2G i:(i;j )2G
2. L’équation (5.2), qui n’est pas sans rappeler la première loi de Kirchoff (ou loi
des nœuds) en électricité, traduit la conservation du flot en chaque sommet du
réseau. En effet, de façon plus littéraire, on peut la traduire par la phrase sui-
vante :
35
Bien entendu, pour que le problème ait une solution, la somme des contributions
doit être égale à 0, soit :
X
b(i) = 0
i2X
Exprimé ainsi, on voit immédiatement que les problèmes de flot permettent de mo-
déliser directement les problèmes réels d’écoulement d’un liquide dans un ensemble
de canalisations (le flot est alors le débit de liquide dans chaque tuyau) ou de circula-
tion du courant électrique dans un réseau, le flot étant ici égal à l’intensité de courant
passant dans un fil.
La figure suivante illustre un réseau et un flot réalisable sur celui-ci. Les triplets
figurant au dessus des arcs sont de la forme (l; u; x).
(0,2,1)
(1,2,2)
(0,2,2)
(2,3,2) (2,3,2)
(0,4,3)
F IG. 5.1: Exemple de réseau portant un flot
36
5.2.1 Travailler avec une seule source et un seul puits
Il est possible de ne travailler qu’avec une seule source et un seul puits. Ainsi, il
est inutile de garder en mémoire la liste des contributions des sommets en dehors de
celles de la source et du puits.
On crée un sommet noté s et appelé super source ou tout simplement source. En-
suite, pour chaque sommet i tel que b(i) > 0, on ajoute un arc (s; i) de capacité maxi-
male b(i) et le tour est joué. Finalement, on pose b(s) =
P b(i).
i2X b(i)>0
Réciproquement, on crée un sommet t (le puits) et une collection d’arcs (i; t) pour
chaque sommet de contribution négative et l’on pose b(s) =
P b(i).
i2X b(i)>0
La figure suivante montre comment appliquer ce principe sur un exemple simple.
(2) (2)
(2) (2)
+3 -1 (3) (1)
(1) (1)
(2) (2)
+5 -5
(2) (2)
+2 -4 (2)
(4)
5.2.2 Eliminer les arcs avec des capacités minimales non nulles
On peut considérer un arc (i; j ) de capacité inférieure lij > 0 comme un arc de
, ,
capacité supérieure uij lij reliant un puits de contribution b(i) = lij à une source
de contribution b(j ) = lij .
37
En effet, on remplace la contrainte de passage d’un minimum de flot sur cet arc
par la disparition de la même quantité de flot en entrée et sa restitution en bout d’arc.
-1
(3) (2) Etape 1 : (3) (2)
Ajout d’une
source
+2 (1, 2) -2 et d’un puits
+2 (1) -2
(1)
(3) (2)
(2) (2)
+3 (1) -3
(2) (4)
(1)
F IG. 5.3: Exemple de suppression des arcs de capacité inférieure non nulle
Dans certains modèles de situations réelles, il est possible d’avoir des capacités sur
les sommets. Par exemple, dans un nœud de répartition EDF, les équipements de rec-
tification de la tension ne peuvent absorber plus d’une certaine quantité d’électricité.
Ceci peut se modéliser par la contrainte suivante :
X
xij 6 (j ) 8j 2 X
i:(i;j ) 2 G
où (j ) est la capacité maximale du sommet j .
Afin de ne pas rajouter cette contrainte dans le système, on la remplace par une
contrainte de capacité sur un arc en dédoublant le sommet j en j0 et j " et en ajoutant
l’arc (j 0; j ") de capacité (j ).
38
5.3 Quelques problèmes de flot classiques
De tous les problèmes de flot dans les réseaux, le problème du flot maximal (ou flot
max pour les intimes) est assurément le plus simple.
Il consiste à tenter de faire circuler sur le réseau la plus grande quantité de flot
possible. Pour ceci, on fixe arbitrairement la contribution de la source à + . Une 1
alternative consiste à supprimer les contributions des sommets s et t et à rajouter un
arc (t; s) de capacité infinie et appelé arc de retour.
Ici, chaque arc est muni d’un coût cij dit coût unitaire par unité de flot et le pro-
blème consiste à trouver un flot x sur le réseau tel que le coût du flot :
X
xij cij
(i;j ) 2 G
soit minimal.
Le plus souvent, nous serons à la recherche d’un flot maximal à coût minimal.
Les algorithmes les plus performants travaillent alors en deux temps. D’une part,
la recherche du flot maximal permet de fixer sa valeur. Il est alors possible, soit de
rechercher ex nihilo un nouveau flot de coût minimal, soit de modifier le flot obtenu
précédemment afin de le rendre minimal.
39
5.4 Quelques techniques utilisées sur les réseaux
Lorsque l’on travaille sur les flots, il est souvent intéressant d’utiliser un graphe
spécial, dérivé du graphe initial, nommé graphe d’écart et noté G(x) = (X; E (x)).
Le graphe d’écart G(x) va donc proposer deux arcs mettant en avant ces deux
possibilités :
(i; j ) de capacité résiduelle rij = uij , xij arc direct de (i; j )
(j; i) de capacité résiduelle rji = xij arc opposé de (i; j )
En outre, seuls les arcs de capacité résiduelle non nulle sont présents dans le
graphe d’écart.
Notez le cas intéressant où lij = uij . Nécessairement, tout flot compatible est tel
que xij = lij = uij . Alors, le graphe d’écart ne contient ni l’arc (i; j ), ni l’arc (j; i) car
ils ont tous deux une capacité résiduelle nulle.
On appelle coupe la partition de l’ensemble des nœuds d’un réseau en deux en-
sembles notés S et S . Une telle coupe est notée [S; S ] et devient une st-coupe si s S 2
2
et t S . Deux ensembles d’arcs sont à étudier en particulier :
8 n o
< (S; S ) = (i; j ) 2 G = i 2 S et j 2 S = !+ (S )
: (S; S ) = n(i; j ) 2 G = i 2 S et j 2 S o = !, (S )
40
5.1 Théorème (Théorème flot-max / coupe-min)
La valeur maximale du flot pouvant circuler sur un réseau est égale à la capacité de
la coupe minimum.
Tous les problèmes qui mettent en jeu un flux physique de matière, d’électricité
ou d’information se modélisent naturellement par les flots. Toutefois, il est d’autres
catégories de problèmes qui les mettent en jeu de manière moins triviale.
41
Finalement chaque employé Ek est modélisé par le sommet correspondant ek . L’ap-
partenance d’un employé à ses corps de métier est représentée par des arcs du type
(ci; ek ) de capacité maximale 1, alors que son appartenance à une catégorie socio-
professionnelle est trahie par un arc unique du type (ek ; pj ).
Le bureau est réalisable s’il existe un flot de valeur m compatible avec le réseau
ainsi constitué, ce qui
P
implique que uj > m. Un tel flot, s’il existe, pourra être
obtenu en résolvant un problème de flot maximum sur le réseau, car n est une borne
max pour la valeur du flot.
e
1
1
1
c 1 e
1 2 1
1 1 p
1 u
1
1 c 1 e 1
s 2 3 t
u
p 2
1 2
1 1
c e
3 4
1
1 e
5
Le but de ce problème est d’arrondir chacun des nombres stocké dans la matrice de
manière à ce que, pour chaque ligne et pour chaque colonne, la somme des nombres
arrondis soit l’arrondi de la somme. En d’autres termes, et si l’on note l’arrondi du
42
nombre , on doit avoir : 8
> P
m
<8 i 2 1::n j=1 dij =i
:8 j 2 1::m P dij =j
> n
i=1
Chaque sommet li 2 L est ainsi associé à la ième ligne de la matrice. Les arcs (s; li)
ont pour capacités le couple (bi c; di e). Réciproquement, chaque sommet cj 2 C étant
associé à la jème colonne de D, les arcs (cj ; t) ont pour capacités (bj c; dj e).
Reste à modéliser chacun des éléments de la matrice par un arc reliant sa ligne et
bcde
sa colonne. Ainsi, l’élément dij est représenté par l’arc (li ; cj ) de capacités ( ; ).
Données de la matrice :
3; 1 6; 8 7; 3
9; 6 2; 4 0; 7
3; 6 1; 2 6; 5
Sommes des lignes :
F IG. 5.5: Modélisation du problème de l’arrondi cohérent d’une matrice par un réseau
43
5.5.2 Application du problème de flot de coût minimal
1. Tout d’abord, chaque site de fabrication Fi est représenté par une source de
contribution :
X
m
8 i 2 1::n b(Fi) = fik
k=1
2. A l’autre bout du réseau, chaque site de consommation est représenté par un
puits de contribution :
X
m
8 j 2 1::q b(Cj ) = , djk
k=1
Finalement les arcs de transport relient les sommets fpik aux sommets cpjk de
même produit Pk . Leurs capacités sont lij
k et uk alors que leur coût est fixé à ck .
ij ij
44
La recherche du flot maximal à coût minimal sur ce réseau garantit l’optimalité
de la solution. Il suffit alors de suivre les chaînes de flot pour retracer le trajet des
marchandises.
La figure suivante montre un cas à trois fabricants, deux produits et deux consom-
mateurs. Il est à noter que la taille du graphe peut devenir très importante avec le
nombre d’acteurs mis en jeu.
f fp
11 11
f
1
d
f fp cp 11
12 12 11
c
d 1
12
f fp cp
21 21 12
f
2
d
f fp cp 21
22 22 21
c
d 2
22
f fp cp
31 31 22
f3
fp
f 32
32
( 2 2
l , u , c
32 32
2
32
)
F IG. 5.6: Modélisation du problème de transport simple par un réseau
L’algorithme de Ford & Fulkerson est le premier à avoir été spécialement conçu
pour la résolution du problème de flot maximal. De nombreuses variantes destinées
à accroître ses performances ont depuis vu le jour. Bien que les algorithmes de type
Preflow Push dûs à Karzanov lui soient très supérieurs en performances, l’algorithme
de Ford & Fulkerson est une base théorique indiscutable.
45
5.6.1 Capacité résiduelle dans le cas général
Dans le cas simple où l’on exclue le fait que les arcs (i; j ) et (j; i) soient présents
simultanément, la capacité résiduelle de l’arc (i; j ) s’écrit :
Soit v la valeur du flot. Mettant à profit la notion de coupe, nous pouvons l’écrire
ainsi : 2 3
X X4 X X
v= xsj = xij , xji5
j (s; j ) 2 E i 2 S j :(i; j ) 2 G j :(j; i) 2 G
X X
v= xij , xij
(i; j ) 2 (S; S) (i; j ) 2 (S;
S)
où l’on notera :
8 X
>
< (i; j) in (S; S) xij
> Flot avant de la coupe [S; S]
X
>
> xij Flot arrière de la coupe [S; S]
: (i; j ) in (S; S )
46
La valeur du flot v est donc égale au flot net de la coupe [S; S].
On a :
X X
xij 6 uij
(i; j ) 2(S; S) (i;j ) 2(S; S)
et comme :
X
xij > 0
(i; j ) 2(S;
S)
alors :
X
v 6 uij = u[S; S]
(i;j ) 2(S; S)
On obtient donc que la valeur du flot est inférieure ou égale à la capacité de toute
st-coupe du réseau. Par extension, si l’on découvre un flot de valeur égale à la capacité
d’une coupe, alors :
Connaissant une valeur de flot v et considérant une st-coupe quelconque [S; S], de
quelle valeur v peut-on encore espérer augmenter v ?
Supposons donc qu’il existe un flot x0 de valeur v + v. Par la relation précédente,
l’on a :
X
v + v 6 uij
(i;j ) 2(S; S)
Or, nous avons vu dans la démonstration précédente que v est égal au flot net dans
la coupe, soit :
47
X X
v= xij , xij
(i; j ) 2 (S; S) (i; j ) 2 (S;
S)
X X
v= xij , xji
(i; j ) 2 (S; S) (i; j ) 2 (S;
S)
d’où :
X X X
v + v , v 6 uij , xij + xij
(i;j ) 2(S; S) (i; j ) 2 (S; S) (i; j ) 2 (S;
S)
soit :
X X
v 6 (uij , xij ) + xij
(i;j ) 2(S; S) (i; j ) 2 (S;
S)
où encore :
X X
v 6 (uij , xij ) + xij
(i;j ) 2(S; S) (i; j ) 2 (S;
S)
Soit finalement :
X X
v 6 rij + xij
(i; j ) 2(S; S) (i; j ) 2 (S;
S)
Or, comme un flot est une quantité positive, l’on en déduit donc que l’augmentation
maximale est bornée par la capacité résiduelle de la coupe.
48
5.6.4 Forme naïve de l’algorithme de Ford & Fulkerson
Cette forme est intéressante car elle est facile à appliquer manuellement.
Marquer t
Faire xij 0 sur tous les arcs du réseau G
Calculer le réseau résiduel G(x)
Tant que t est marqué :
Supprimer les marques de tous les sommets
pred[i] ; 8 2
i X
marquer s et faire Liste fgs
6 ;
Tant que Liste = et t non marqué
Retirer un sommet i de la liste
8 2
(i; j ) !+ (i) tel que j non marqué
marquer j
pred[j ] i
Liste Liste [f g
j
Fin 8
Fin Tant Que
Si t est marqué
Augmenter le flot sur le chemin de s à t contenu dans pred
Mettre à jour G(x)
Fin Si
Fin Tant que
49
L’algorithme se termine lorsque l’on ne peut pas marquer le sommet t. Soit donc S
l’ensemble des nœuds marqués. On pose tout naturellement : S = X S . n
(
s2S
Par construction :
t 2 S
donc, [S; S] est une st-coupe. Si l’on n’a pas pu marquer t cela signifie que l’algo-
rithme ne peut plus marquer de sommets de S depuis S . On en déduit donc que :
en appliquant xij S) :
= 0 8 (i; j ) 2 (S;
X
v= xij
(i; j ) 2 (S; S)
On est donc dans une situation où le flot est égal à la capacité de la coupe. Ce qui
veut dire que nous sommes dans le cas flot max/coupe min. On a donc réussi !
50
En effet, s’il existait un tel chemin, ce serait un chemin augmentant sur lequel on
pourrait pousser du flot.
51
Chapitre 6
6.1 Définitions
6.1 Définition (Arbre Couvrant)
Soit G un graphe non orienté muni d’une fonction c de valuation sur les arcs. On
appelle Arbre Couvrant tout sous graphe connexe et sans cycle qui recouvre tous les
sommets.
Par exemple, l’arbre des plus courts chemins depuis un sommet s vers tous les
autres sommets constitue un arbre couvrant sur un graphe orienté.
Il est néanmoins important de bien différencier les deux problèmes. Les éléments
suivants peuvent vous y aider :
1. Le problème de plus courts chemins est le plus souvent traité sur un graphe
orienté alors que la notion d’arbre de recouvrements est fondamentalement non
orientée. Vous retiendrez qie rechercher les plus courts chemins est une opéra-
tion plus compliquée et plus coûteuse que la mise en évidence d’un ACM.
52
2. Les deux problèmes travaillent avec des fonctions objectif différentes. Dans le
cas des plus courts chemins. On recherche un chemin de longueur minimale
pour chaque couple (s; i) i8 2 G. Alors que dans le cadre de l’ACM on minimise
le coût total de l’arbre (en tant que somme des longueurs de ses arêtes) ce qui
n’est absolument pas la même chose !
C’est une vaste famille de problèmes mettant en jeu des interactions entre divers
composants d’un système où l’on désire proposer un service ou assurer des communi-
cations au moindre coût. Il est important de voir que l’on se place ici du point de vue
du concepteur et non point de celui de l’utilisateur.
1. Construction d’autoroutes pour relier des grandes villes avec le plus faible ki-
lométrage total. Ici, la dualité entre le point de vue du constructeur et celui de
l’utilisateur est la plus forte.
En effet, ce qui intéresse l’utilisateur c’est de pouvoir se rendre depuis son point
d’entrée sur le réseau vers chacune de ses destinations et ce, le plus rapidement
possible. Le sous graphe qui l’intéresse est donc l’arborescence enracinée sur son
point d’entrée.
A l’autre bout de la chaîne, le concepteur du réseau veut minimiser ses frais
d’installation et donc construire le réseau qui permet d’assurer le service (c’est
à ) dire l’interconnexion entre toutes les villes) mais dont la longueur totale soit
minimale. Il choisit donc l’ACM.
3. Créer un réseau d’ordinateurs avec des lignes à haute capacité genre Liaison
Spécialisée à Haut Débit.
53
4. L’ACM se révèle le meilleur compromis pour construire les circuits électriques à
haute fréquence :
(a) Il est important de réduire la longueur totale du circuit afin d’éviter les
effets d’induction de ligne à retard et de parasitage
(b) Tous les composant doivent néanmoins être connectés.
Le but est d’établir un moyen de passer un message entre tous les agents secrets en
minimisant le risque de voir celui-ci passer à l’ennemi. Pour On note pij la probabilité
de voir passer le message à l’ennemi lors de la transmission entre l’agent i et l’agent
j.
On cherche donc à minimiser :
Y
1, (1 , pij )
(i;j ) 2 T
devient : 0 1
Y
max log @ (1 , pij )A
(i; j ) 2 T
soit encore :
X
max log(1 , pij )
(i;j ) 2 T
54
En effet, considérons un ensemble de patients présentant tous la même maladie
(pour le moment inconnue) mais avec des examents cliniques différents.
Le but est de regrouper les patients en paquets afin de rattacher leur syndrôme à
quelque chose de «connu».
On peut définir des amas en créant un ACM puis en coupant les arcs de plus fort
coût. Le plus compliqué est de savoir à partir de quelle limite de coût on ne doit plus
retenir d’arcs. Nous verrons que l’algorithme de Kruskal est le mieux adapté pour cet
exemple.
En préliminaire, il est important de préciser que l’on entend ici par coupe associée
à un sous graphe H de G un couple (S; S ) sans arête entre S et S .
Supposons qu’il existe un arc (k; l) 2 [S; S ] tel que ckl < cij .
Formons alors l’arbre T = T nf(i; j )g [ f(k; l)g. Si nous appelons C (T ) le coût d’un
arbre T , nous avons :
C (T ) = C (T ) , cij + ckl
55
S
S
T*
i j
or comme ckl < cij , il en suit que C (T ) < C (T ) ce qui contredit l’hypothèse selon
laquelle T était optimal.
56
on en déduit immédiatement que cij = ckl . On peut donc remplacer (i; j ) par (k; l)
dans T sans altérer la propriété. En outre, T et T 0 ont un arc commun de plus. Itérer
ce processus jusqu’à ce que T = T 0 conclut la démonstration.
8 (k; l) 2 G n T cij 6 ckl pour tout arc (i; j ) du chemin qui connecte k à l dans T.
En effet, si ckl < cij , alors le remplacement de (i; j ) par (k; l) permet d’obtenir un
meilleur arbre ce qui contredit l’hypothèse d’optimalité.
La preuve de suffisance de cette condition utilise la condition sur les coupes, ce qui
permet de mettre en évidence la connection forte entre ces deux notions.
Comme nous n’avons posé aucune condition particulière sur le choix de l’arc (k; l),
ce raisonnement s’applique à chaque arc de [S; S ]. On en déduit donc que T vérifie la
condition de coupe : il est donc optimal !
57
6.4 Les algorithmes de recherche d’un ACM
Cet algorithme construit l’arbre en ajoutant à chaque itération l’arbre de plus petit
coût n’ajoutant pas de cycle. Comme il n’ajoute pas nécessairement des arcs sur des
sommets contigüs, cet algorithme peut être vu comme le regroupement progressif
d’une forêt (donc chaque arbre ne contient initialement qu’un seul sommet) en un
seul arbre en ajoutant les arcs de plus faible coût.
2 10 4
35
1 25 20 30
40
3 15 5
F IG. 6.2: Graphe d’exemple pour l’illustration des algorithmes de Kruskal et Prim
58
2 10 4 2 10 4
35 35
1 25 20 30 1 25 20 30
40 40
3 15 5 3 15 5
2 10 4 2 10 4
35 35
1 25 20 30 1 25 20 30
40 40
3 15 5 3 15 5
2 10 4
3 15 5
59
2 10 4 2 10 4
35 35
1 25 20 30 1 25 20 30
40 40
3 15 5 3 15 5
2 10 4 2 10 4
35 35
1 25 20 30 1 25 20 30
40 40
3 15 5 3 15 5
2 10 4
A chaque étape, les sommets
35 de S sont ceints d'un trait
épais. Remarquez que l'on ne
1 25 20 30 part du sommet 1 que par
pure convénience. A chaque
40 étape on marque en gras les
arcs avants de la coupe qui
3 15 5 n'induisent pas de cycle
60
Bibliographie
[1] R.K. Ahuja, T.L. Magnanti, and J.B. Orlin. Network Flows : Theory, Algorithms,
and Applications. Prentice Hall, New York, 1993.
61