You are on page 1of 61

1

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.

1.1 Définitions fondamentales

Il existe plusieurs manières de caractériser un graphe, nous allons en parcourir


quelques unes. Notons immédiatement qu’il existe deux grands types de graphes : les
graphes orientés et les graphes non orientés. Nous allons commencer notre étude par
les graphes orientés puis nous traiterons des différences avec le cas non orienté dans
une section spécifique.

1.1 Définition (Graphe)


Un graphe est caractérisé par 2 ensembles nommés X et E et respectivement nommés
Sommets et Arcs, avec :

(
jX j = n les sommets seront numérotés de 1 à n
jE j = m les arcs seront numérotés de 1 à m

Par définition, E est composé de couples e = (i; j) 2 X  X .


On appelle respectivement i et j l’ origine et la destination de l’arc e.

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

F IG. 1.1: Deux représentations « graphiques » du même graphe

A cela, nous allons ajouter quelques définitions supplémentaires :

1.2 Définition (Boucle)


On appelle boucle un arc (i; i)
Par exemple, dans le graphe de la figure (1.1), l’arc (2; 2) est une boucle.
1.3 Définition (Sommets adjacents)
Les sommets i et j du graphe G = (X; E ) sont dits adjacents si et seulement si, l’arc
(i; j ) ou l’arc (j; i) appartiennent à E .

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.

1.4 Définition (Graphe simple)


Un graphe G = (X; E ) est dit simple si et seulement si :

1. Pour tout couple (i; j ) 2 X  X , il existe au plus un arc (i; j ) 2 E


2. 8 i 2 X; l’arc (i; i) n’existe pas
3
De manière plus littéraire : un graphe simple est un graphe sans boucle ni arcs mul-
tiples entre les même sommets.

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.

F IG. 1.2: Exemple de graphe planaire

1.2 Les graphes non orientés


1.6 Définition (Graphe non orienté)
On appelle graphe non orienté tout graphe où les arcs (i; j ) et (j; i) sont indiscer-
nables.

4
Le vocabulaire change un peu : on appelle habituellement arête un arc dans le cas
non orienté.

1.3 Cocycles, degrés

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.

Si nous reprenons le graphe de la figure (1.1), nous avons, par exemple :


8 ,+ (2) = f1 ; 2 ; 3g
>
>
< ,, (1) = f2 ; 4g
>
: !!, (2)
>
+
= fb ; c ; d ; eg
(3) = fd ; e ; f g
Dans le cas non orienté, l’on a ,+ = ,, = , et, réciproquement, !+ = !, = !.
Notons qu’il existe un autre système de notation :
(
,+ , ,
,, , ,,1
Les degrés sont des quantités attachées au sommet et qui expriment la cardinalité
des cocycles. On notera :
(
d+G (i) = j,+ (i)j = j!+(i)j demi degré extérieur/suprérieur de i dans G
d,G (i) = j,, (i)j = j!,(i)j demi degré intérieur/inférieur de i dans G

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.

On appelle degré du sommet i et l’on note dG (i) = d+ ,


G (i) + dG (i).
Dans le cas non orienté, l’on a : dG (i) = d+ ,
G (i) = dG (i)
Si l’on revient au cas orienté, on a un résultat intéressant. Soit G = (X; E ), on a :
X X
d+G (i) = d,G (i)
i2X i2X

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

1.4 Matrices associées aux graphes

Il y a deux matrices typiquement associées aux graphes : la matrice d’incidence


arc-sommet et la matrice d’adjacence sommet-sommet.

1.4.1 Matrice d’incidence arc-sommet


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.

1.4.3 Expression des matrices

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.

1.5.1 Définitions générales

1.7 Définition (Chemin)


On appelle chemin depuis un sommet s vers un sommet t une suite d’arcs :
( s = i0 ; i1 )
( i1 ; i2 )
( i2 ; i3 )
::: :::
( ik,1 ; ik = t )

2
d
a

1 c 4

b
e
3

F IG. 1.4: Exemple de chemin (en trait gras) du sommet 1 au sommet 4

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.

La figure (1.4) illuste la notion de chemin depuis le sommmet 1 vers le sommet 4.


Les arcs utilisés sont dessinés en gras. L’on voit immédiatement qu’ils sont toujours
parcourus depuis leur origine vers leur destination. Ainsi la destination d’un arc est
l’origine de son successeur dans le chemin.

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.

1.8 Définition (Chaîne)


Une chaîne est un chemin sur lequel on a relaché la contrainte d’orientation.

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

F IG. 1.5: Exemple de chaine (en trait gras) du sommet 1 au sommet 4

1.9 Définition (Circuit, Cycle)


Un circuit est un chemin dont l’origine et la destination sont confondues.

Dans le cas non orienté, on parle de cycle.

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

1.11 Définition (Chemin élémentaire)


Un chemin qui ne passe qu’une seule fois par chacun des sommets qu’il traverse est
dit élémentaire

9
2 2
d
d
a a

1 c 4 1 c 4

b b
e e
3 3

Cycle Circuit

F IG. 1.6: Exemple de chemin (en trait gras) du sommet 1 au sommet 4

Corollaire immédiat : Un chemin élémentaire est nécessairement simple.


1.1 Théorème
Tout chemin de s vers t contient un chemin élémentaire de s vers t.

La démonstration de cette propriété est laissée en exercice.

Dans la suite de ce cours, on ne s’intéressera désormais plus qu’aux chemins élé-


mentaires. Aussi, à partir de maintenant, la notion de chemin devra être comprise
comme chemin élémentaire.

1.5.2 Chemin Eulérien, chemin Hamiltonien

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.

1.12 Définition (Chemin Eulérien)


On qualifie d’Eulérien un chemin qui passe une et une seule fois par chaque arc du
graphe qui lui sert de support.

En outre, si l’on impose que l’origine et la destination du chemin soit confondues,


on parle de circuit Eulérien.

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.

1.13 Définition (Chemin Hamiltonien)


On qualifie d’Hamiltonien un chemin qui passe une et une seule fois par chaque som-
met du graphe qui lui sert de support.

En outre, si l’on impose que l’origine et la destination du chemin soit confondues,


on parle de circuit Hamiltonien.

A présent, valuons chaque arc du graphe et recherchons le circuit Hamiltonien de


longueur minimale sur le graphe. On obtient le problème ultra classique du Voyageur
de Commerce.

1.6 Sous graphes, graphes partiels

1.6.1 Définitions générales

Soit G = (X; E ) un graphe. On va désormais définir les notions importantes de


sous graphe et de graphe partiel. Afin d’illustrer notre propos, nous nous servirons du
graphe suivant comme base :

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

1.14 Définition (Graphe partiel)


Soit Ep  E un sous ensemble des arcs E de G, Gp = (X; Ep) est un graphe partiel
de G.

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

F IG. 1.8: Exemple d’extraction d’un graphe partiel

En résumé, on obtient un graphe partiel de G en supprimant certains arcs. Par


exemple, dans la figure (1.8), et à partir du graphe de la figure (1.7), si l’on ne retient
que les arcs marqués en gras sur la partie de gauche, l’on obtient le graphe partiel de
la partie de droite.

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.

1.15 Définition (Sous graphe)


Soit Xp  X un sous ensemble des sommets X de G. On appelle sous graphe de G
tout graphe Gs = (Xp ; E (Xp \
Xp)). 
De manière plus littéraire, on obtient un sous graphe en extrayant un sous en-
semble des sommets de G et en ne retenant que les arcs qui relient ces sommets, tel
qu’illustré sur la figure (1.8).

12
4
d i
h
a
1 2
a
c 1 2
b
5 e 6 b
3 e
f
g 3

Sélection de sommets (en gras) Sous graphe obtenu

F IG. 1.9: Exemple d’extraction d’un sous graphe

1.6.2 Cliques, Stables, Coloration

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.

Remarque : Un sommet isolé est à la fois une clique et un stable.


1.18 Définition (Coloration)
On appelle Coloration une partition en stables d’un graphe.

Ce dernier vocabulaire est lié au problème classique de coloration d’une carte.


Soit une carte géographique représentant plusieurs pays. On souhaite colorier chaque
pays de manière à ce qu’il n’ait pas la même couleur que chacun de ses voisins.

Ce problème peut être résolu en cherchant une partition en stables du graphe


obtenu en associant chaque pays à un sommet et chaque arc à une frontière commune
entre 2 pays. Il suffit alors d’associer une couleur à chaque stable obtenu.

Remarque : on essaye le plus souvent de déterminer le nombre minimal de cou-


leurs nécessaires. Il a été démontré que l’on peut toujours colorier un graphe planaire
avec, au plus, 3 couleurs.

13
Chapitre 2

Arbres et parcours

2.1 Notion d’arbre

2.1.1 Définitions fondamentales

La notion d’arbre est fondamentale en recherche opérationnelle. Après avoir donné


une première définition, nous énumèrerons plusieurs propriétés équivalentes à cette
définition. Notons immédiatement que la notion d’arbre est non orientée : elle s’ap-
plique aussi bien au cas qu’au cas non orienté.

2.1 Définition
Un arbre est un graphe connexe et sans cycle (propriété 0).

Les propriétés suivantes (qui s’appliquent à un graphe comptant n sommets) sont


équivalentes à la définition précédente :

1. Un arbre est un graphe connexe qui compte exactement n , 1 arcs


2. Un arbre est un graphe sans cycle qui compte exactement n , 1 arcs. On parle
de graphe acyclique minimal

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

La démonstration de l’équivalence de ces propositions nécessite un théorème in-


termédiaire.
2.1 Théorème
f E g un graphe quelconque, alors :
Soit G = X;

– Si G est sans cycle, alors m  n , 1

– Si G est connexe, alors m  n , 1

La démonstration de ce théorème se fait de manière constructive.

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).

F IG. 2.1: Construction d’un arbre : situation de base

Lorsque l’on rajoute un arc, 2 cas peuvent se présenter :

1. L’arc réunit 2 sommets de la même composante connexe (2.2.a).

– Le nombre de composantes connexes du graphe ne change pas


– On crée un cycle dans la composante connexe

2. L’arc réunit 2 sommets appartenant à des composantes connexes différentes (2.2.b).

– Le nombre de composantes connexes diminue de 1


– On ne rajoute pas de cycle dans le graphe

15
(a)

(b)

F IG. 2.2: Construction d’un arbre : opérations élémentaires

Appliquons ce principe de construction à la démonstration du théorème précé-


dent.
Si l’on désire que le graphe soit sans cycle, il nous faut procéder par la deuxième
méthode d’ajout d’arc. Initialement, comme il n’y a pas d’arcs, il y a n compo-
santes connexes. A chaque ajout d’arc, le nombre de composantes connexes di-
,
minue de 1 unité. Après avoir ajouté n 1 arcs par cette méthode, il ne reste
qu’une seule composante connexe, le graphe est donc connexe. Si maintenant,
l’on construit un graphe par l’un ou l’autre principe de construction, il faut ajou-
ter au moins (n-1) arcs avant d’obtenir une seule composante et donc un graphe
connexe. D’où la seconde partie du théorème. En vertu du premier principe de
construction, tout ajout d’arc rajoutera un cycle, ce qui démontre la première
partie du théorème.

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.

Ce second corollaire est évident à démontrer par construction. Supprimons toutes


les arêtes du graphe avant de les réintroduire sans créer de cycle : nous venons
bien de créer un graphe partiel qui est un arbre !

2.1.3 Démonstrations complémentaires

2.2 Définition (Racine)


Soit un graphe orienté G. Le sommet s est dit racine de G = (X; E ) si et seulement
8 2 nf g
si, x X s il existe un chemin de s vers x.
2.3 Définition (Arborescence)
Un arbre orienté admettant une racine est une arborescence

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

F IG. 2.3: Arborescence ou pas?

18
Chapitre 3

Plus courts chemins

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.

3.2 Définition (Plus court chemin)


Un plus court chemin de s vers t est un chemin de s vers t dont la longueur est mini-
male parmi tous les chemins de s vers t. Dans la suite on notera Pts un tel chemin.

3.3 Définition (Fonction de marquage, potentiel)


On appelle fonction de marquage ou potentiel une application de X dans R.

En clair, cela revient à valuer, ou porter une valeur, sur chacun des sommets du
graphe.

3.4 Définition (Plus courtes distances)


On appelle plus courte distance de s à i et l’on note ds (i) la fonction de marquage égale
à la longueur du plus court chemin de s vers i. Par abus de notation, et une fois la
source s fixée, on écrira d(i) pour ds (i).

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 :

Pts = (s = i1; i2; i3 : : : ; ip,1; ip = t)


3.1 Théorème (Condition d’optimalité des distances)
Soit d(:) la plus courte distance depuis la source s vers un sommet quelconque du
graphe. Alors :
8 (i; j ) 2 G d(j ) 6 d(i) + cij
En effet supposons qu’il existe deux sommets i et j tels que d(j ) > d(i) + cij . Ceci
implique notament que l’arc (i; j ) n’est pas utilisé dans le chemin Pj associé à d(j ).
Soit Pi le plus court chemin vers i. Par définition sa longueur est d(i). Si on lui ajoute
l’arc (i; j ), on obtient un chemin de longueur d(i) + cij < d(j ). D’où la contradiction car
d(j ) est sensée être la plus courte distance pour aller en j .

3.2 Le problème

Rechercher un plus court chemin de s vers t revient à rechercher un chemin de s


vers t de longueur minimale s’il existe. Les conditions d’existence sont les suivantes :

1. Il existe au moins un chemin de s vers t

2. Aucun chemin de s vers t ne contient de circuit absorbant i.e. de circuit de lon-


gueur négative.

En effet, si un tel circuit existait, l’on pourrait le parcourir indéfiniment pour


abaisser la longueur du chemin.

Dans la suite de cet exposé nous supposons :

1. Il existe un chemin depuis un sommet s vers tous les autres sommets du graphe.

2. Il n’existe pas de circuit absorbant dans le 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

F IG. 3.1: Démonstration de la propriété de sous optimalité

Soit P  un plus court chemin de la source s vers un sommet quelconque t.


– Par définition de la plus courte distance (3.4), d(t) = l(P ).

– 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.

Conséquence : Pour chaque arc i; j 2 P , on a d(j ) = d(i) + cij .


La réciproque de cette propriété fondamentale fait l’objet du théorème suivant :
3.2 Théorème
Soit un chemin P = Pts tel que pour chaque arc (i; j ) 2 P l’on ait d(j ) = d(i) + cij .
Alors P est un plus court chemin de s vers t.

Dans cette démonstration, on utilise la notation P = (s = i1; i2; i3 ; : : : ; ip,1 ; ip = t).


On part de d(t), plus courte distance de s à t que l’on décompose de manière à faire
apparaître le coût des arcs composant P et le tour est joué.

d(t) = d(ip) = (d(ip) , d(ip,1))


+ (d(ip,1) , d(ip,2))
+ (d(ip,2) , d(ip,3))
.. ..
. .
+ (d(i2) , d(i1))
21
avec d(i1) = d(s) = 0 (hypothèse 2).

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

La plus courte distance au sommet t étant égale à la longueur du chemin P , celui-ci


est un plus court chemin de s vers t.
3.2 Propriété
Soit G0 = (X; E 0 ), où E 0 est l’ensemble des arcs (i; j ) tels que cij = d(j ) , d(i). Alors,
G0 contient une arborescence enracinée en s.
Démonstration : Pour chaque sommet t, il existe un plus court chemin de s à t dans
G0. Réciproquement, il suffit de construire une arborescence dans G0 pour obtenir
un plus court chemin depuis s vers tout autre sommet à l’aide d’un algorithme de
parcours.

3.3 Les algorithmes de plus court chemin

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.

3.3.1 Graphe acyclique

3.2 Remarque (Précision importante concernant le vocabulaire)


Dans le cas des graphes non orientés, le terme acyclique décrit un graphe sans cycle,
alors que si l’on traite des graphes orientés, on appelle acyclique tout graphe sans
circuit.

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.

Algorithme de tri topologique

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

où j est le sommet prédécesseur de k de distance minimale par rapport à s.

On obtient alors l’algorithme suivant initialisé en s, seul sommet sans prédéces-


seur par définition.

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

3.3.2 Arcs à coûts positifs, algorithme de Dijkstra

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.

Pour ce faire on partitionne l’ensemble des sommets en deux ensembles S et S .


Les sommets de S sont dits fixés et ceux de S temporaires. On utilise une fonction de
marquage d(:) que nous appellerons distance et qui à la fin de l’algorithme sera égale
à la distance minimale depuis s vers chaque sommet.

A chaque étape, la définition de d est la suivante :

d(i) est la longueur


d’un plus court chemin de s vers i dont tous les
sommets intermédiaires sont dans S . Initialement, d(s) = 0 et d(i) = +1,
8 6
i = s.
L’algorithme repose sur le postulat suivant :

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.

La complexité temporelle de l’algorithme de Dijkstra sous cette forme simple est


O(n2). En effet, à chaque étape, on transfère un nœud de S vers S , ce qui nous fait n
itérations. A l’intérieur de chaque itération, on recherche le sommet de S qui possède
la plus petite distance temporaire, opération en O(n) dans le pire des cas. Toutefois,
des structures de données performantes (telles que les Tas de Fibonnacci) permettent
de rabaisser significativement cette complexité (O(m + n log n)).

Algorithme de Dijkstra (forme simple)

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 :

Elle se fait par récurrence sur la taille de S .

3.3.3 Le cas général, algorithme de Ford

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 :

Algorithme de Ford (forme simple)


d(s) 0
d(i) +1 8 i 2 X n fsg
Tant que 9 (i; j ) 2 G avec d(j ) > d(i) + cij
d(j ) d(i) + cij
pred[j ] i
Fin tant que

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.

Sous cette forme directe, l’algorithme de Ford est informatiquement inexploitable.


C’est pourquoi l’on a recours à l’algorithme modifié qui repose sur l’utilisation d’une
liste de sommets. Cette dernière contient les sommets dont les distances ont été mo-
difiées et qui sont donc susceptibles de créer des arcs violant la condition (3.1).

Algorithme de Ford modifié


d(s) 0
d(i) +1 8 i 2 X n fsg
LISTE fs g
Tant que LISTE 6= ;
Retirer un sommet i de la liste
8 (i; j ) 2 !+ (i)
Si (d(j ) > d(i) + cij )
Alors
d(j ) d(i) + cij
pred[j ] i
Si j 62 LISTE
LISTE LISTE [ fj g
Fin si
Fin si
Fin 8
Fin tant que

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

On suppose le projet composé de n tâches numérotées de 1 à n chacune dotée d’une


durée di supposée connue (la terminologie Anglo-Saxonne est processing time, laquelle
est souvent notée pi ).

Le problème de l’ordonnancement consiste à affecter à chaque tâche i une date de


début ti . On suppose que le projet commence à t0 = 0.

Divers types de contraintes peuvent se greffer sur le noyau dur du problème :

Les contraintes temporelles portent sur les dates de début et de fin des tâches

Les contraintes d’allocation de ressources spécifient qu’une ressource critique


(e.g., la grue dans un chantier de BTP) ne peut être utilisée par plus d’un certain
nombre de tâches à la fois

L’objectif est de minimiser la durée totale du projet (makespan en Anglais), c’est-à-


dire, calculer la date de fin au plus tôt du projet.
4.1 Définition (Date de fin au plus tôt)
On appelle date de fin au plus tôt et l’on note L la durée minimale d’exécution du
projet permettant de respecter les contraintes.

28
4.2.1 Les contraintes temporelles (ou contraintes de potentiel)

Elles sont essentiellement de 3 types :

1. La tâche i ne peut commencer avant la date t0i dite date de disponibilité :

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

4.2.2 Les contraintes cumulatives

Elles permettent de traiter certaines contraintes d’allocation de ressources. Soit


une ressource Rk dont la quantité totale disponible pour le projet à l’instant t est
,k (t).
On note ik (i ; t) la quantité de Rk nécessaire à l’accomplissement de la tâche i à
l’instant t sachant que la ti = i .

La contrainte cumulative relative à la ressource k et à l’instant t s’écrit :


X
ik (i; t) 6 ,k (t)
i=1::n
Ce genre de contraintes est pénible à traiter car il nécessite de connaître la date
de début de chacune des tâches ... ce qui est le but final du problème.

Choisir ,k et ik constants au cours du temps ne simplifie pas énormément le pro-


blème car il est toujours nécessaire de connaître les dates de départ pour traiter la
contrainte.

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).

La première méthode pour modéliser cette contrainte consiste à utiliser un ou


logique sur les deux contraintes de potentiel suivantes :

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.

L’autre méthode consiste à introduire une contrainte d’allocation de ressource


entre ces deux tâches.

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.

4.3 Un exemple simple : le chantier

Soit un chantier constitué des tâches suivantes :


N0 Description Durée
1 Terrassement 10 jours
2 Installation de la grue 2 jours
3 Coulage des Fondations 5 jours
4 Branchement électrique 3 jours
5 Gros œuvre de maçonnerie 6 jours
Les contraintes de précédence sont les suivantes :

– 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.

4.4 Définition (Marge)


La marge d’une tâche i (notée mi) est la différence entre les dates au plus tard et au
plus tôt, soit :
mi = i , i
4.5 Définition (Ordonnancement au plus tôt (tard))
On appelle Ordonnancement au plus tôt (tard) l’ordonnancement du projet correspon-
dant aux dates au plus tôt (tard).

4.4 Représentation du problème d’ordonnancement

Il existe trois grands modèles pour représenter les ordonnancements.

4.4.1 Diagramme de Gantt

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.

4.4.2 Le modèle PERT (Program Evaluation and Review Tech-


nique)

C’est un graphe où les tâches et les contraintes de précédence sont représentées


par des arcs. Les sommets correspondent à des instants privilégiés du déroulement
du processus : les dates de début et de fin de chaque tâche.

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

F IG. 4.1: Diagramme de Gantt associé au problème du chantier

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

F IG. 4.2: Réseau PERT associé au problème du chantier

4.4.3 Le modèle Potentiel-tâches

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

F IG. 4.3: Réseau Potentiel-Tâches associé au problème du chantier

4.5 Résolution

Que ce soit en utilisant le modèle PERT ou le modèle Potentiel-Tâches, la solution


du problème d’ordonnancement est donnée par la résolution d’un problème de plus
long chemin (donné par l’algorithme de Bellmann) entre le début et la fin du projet.

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.

Le graphe ne contient pas de circuit car les contraintes de précédence fournissent


un ordre partiel sur les tâches. On utilisera donc une forme adaptée de l’algorithme
de Bellmann pour calculer les plus longs chemins.
4.6 Définition (Chemin critique)
On appelle chemin critique tout plus long chemin entre le début et la fin du projet.

4.1 Théorème (Résultats sur le graphe Potentiel-tâches)


Soit un graphe potentiel-tâches modélisant l’ordonnancement des tâches d’un projet
complexe.

Soit :

a) L la longueur du plus long chemin entre le début et la fin du projet.


b) pi la longueur du plus long chemin entre le début du projet et la tâche i.

c) qi la longueur du plus long chemin entre la tâche i et la fin du projet

Alors :

1. La durée minimale du projet est L

33
2. i = pi
3. i = L , qi

Conséquence

Voici le modus operandi pour calculer les différentes grandeurs associées à un


projet d’ordonnancement :

– On calcule L et l’ordonnancement au plus tôt en résolvant un problème de plus


long chemin sur le graphe potentiel-tâches à partir du sommet correspondant
au début du projet.

– On calcule l’ordonnancement au plus tard en résolvant un problème de plus long


chemin sur le graphe potentiel-tâches dont l’on a préalablement inversé les arcs
et à partir du sommet correspondant à la fin du projet.

34
Chapitre 5

Introduction aux problèmes de flot

5.1 Notion de réseau

On appelle réseau un graphe sur lequel on va faire transiter un flot.

SoitG = (X; E ) un graphe orienté avec jX j = n et jE j = m. Chaque arc est doté


de deux grandeurs positives ou nulles, l et u, respectivement dénommées capacité
minimale et capacité maximale et telles que :

8(i; j ) 2 G 0 6 lij 6 uij

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

1. La condition (5.1) spécifie que le flot est borné inférieurement et supérieurement


par les capacités des arcs.

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 :

La quantité de flot sortant d’un sommet moins la quantité de flot


entrant dans le même sommet est égale à la contribution de ce sommet.

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)

(1,4,3) (2,2,2) (0,1,1)


+4 -4

(2,3,2) (2,3,2)
(0,4,3)
F IG. 5.1: Exemple de réseau portant un flot

5.2 Les simplifications du problème

Plusieurs aménagements d’un réseau de flot quelconque permettent de simplifier


le traitement algorithmique du problème. Nous allons en considérer quelques unes.
De plus amples informations sont disponibles dans [2], [4], [3] ou [1].

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)

(2) (3) (2) (3)

F IG. 5.2: Exemple de suppression de sources et puits multiples

5.2.2 Eliminer les arcs avec des capacités minimales non nulles

L’utilisation de capacités minimales entraîne des lourdeurs algorithmiques non


négligeables. Aussi, il peut être judicieux de les éliminer avant le traitement du pro-
blème. Insistons néanmoins sur le fait que le procédé que nous allons expliciter peut
conduire à un graphe si grand qu’il n’en justifie plus l’intérêt. Aussi, on pourra se
reporter à [1] pour les techniques permettant de traiter directement les réseaux à
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.

La deuxième partie de l’opération consiste à éliminer le nouveau puits et la nou-


velle source ainsi crées par l’opération précédente. Cette technique est illustrée sur la
figure suivante :

-1
(3) (2) Etape 1 : (3) (2)
Ajout d’une
source
+2 (1, 2) -2 et d’un puits
+2 (1) -2

(2) (4) (2) (4)


+1

Etape 2 : suppression de la source et du puits excédentaires

(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

5.2.3 Cas des capacités sur les sommets

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

5.3.1 Le problème de flot maximal

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.

On appelle valeur du flot et l’on note habituellement v la somme du flot sortant de


la source (ou entrant au puits). Soit donc :
X X
v= i:(s;i) 2 G xsi = j :(j;t) 2 G xjt

5.3.2 Le problème du flot de coût minimum

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.

Ce problème est d’une importance cruciale en recherche opérationnelle. En effet,


comme nous le verrons plus tard, il sert à modéliser de nombreux cas concrets. Long-
temps considéré comme un problème difficile, la démonstration de sa polynomialité
par Edmonds et Karp ouvrit en son temps de nouveaux horizons en recherche opéra-
tionnelle.

39
5.4 Quelques techniques utilisées sur les réseaux

5.4.1 Le graphe d’écart

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)).

Soit (i; j ) un arc de G de capacités minimale et maximale respectives lij et uij et


portant le flot xij . Il est alors possible soit :

– d’ajouter encore jusqu’à uij , xij unités de flot depuis i vers j .


,
– de retirer jusqu’à xij lij unités de flot depuis i vers j , ce qui peut ête vu comme
l’ajout d’autant d’unités de flot depuis j vers i.

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.

5.4.2 La notion de coupe

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 )

On définit la capacité de la st-coupe [S; S ], et l’on note u([S; S ]), la quantité :


X
u([S; S ]) = uij
(i; j )2(S;S )

5.1 Définition (Coupe minimum)


On appelle coupe minimum, la st-coupe de capacité minimale.

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.

Cette notion sera étudiée plus en détails lors de la présentation de l’algorithme de


Ford et Fulkerson pour la recherche du flot max.

5.5 Quelques exemples de problèmes modélisables


par les flots

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.

5.5.1 Problèmes faisant intervenir le flot maximal

Le problème des représentants

Soit une entreprise comptant n employés E1, E2 , : : : , En . Ceux-ci sont répartis


dans m corps de métiers et r catégories socio-professionnelles ; un employé pouvant
appartenir à plusieurs corps de métiers mais à une et une seule catégorie socio-
professionnelle.

Lors des élections des représentants du personnel (modèle grand-breton), chaque


corps de métier doit désigner 1 représentant pour le bureau sachant que chaque ca-
tégorie socio-professionnelle j ne peut avoir plus de uj membres siégeant.

La question que l’on va résoudre en utilisant un flot maximal est la suivante :

Existe-t-il un bureau compatible avec ces contraintes?

Pour répondre à cette (légitime) interrogation, on va utiliser le graphe suivant. On


associe à chaque corps de métier Ci un sommet ci et un arc (s; ci ) de capacité maximale
1 représentant le fait que chaque corps de métier désigne 1 représentant.

A l’autre bout du graphe, chaque catégorie socio-professionnelle Pj se voit repré-


sentée par un sommet pj auquel on associe immédiatement l’arc (pj ; t) de capacité
maximale uj , nombre maximal de membres de la catégorie professionnelle autorisés
à siéger au bureau.

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.

La figure suivante illustre un réseau modélisant ce problème de représentation.

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

F IG. 5.4: Modélisation du problème des représentants dans un réseau

Le problème de l’arrondi cohérent

Soit D une n  m matrice de nombres réels. On note respectivement i; i 2 1::n


et j ; j 2 1::m les sommes des éléments sur les lignes et les colonnes.

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

Contrairement à de nombreuses applications où l’arrondi est imposé à l’entier le


bc de
plus proche, ici   est choisi librement parmi  et  .

Il est possible de modéliser ce problème très facilement à l’aide d’un réseau.

Il suffit de considérer, en plus des sommets s et t, deux ensembles de sommets L


et C modélisant respectivement les lignes et les colonnes de la matrice.

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 (b i c; d i e). Réciproquement, chaque sommet cj 2 C étant
associé à la jème colonne de D, les arcs (cj ; t) ont pour capacités (b j c; d j 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 (  ;  ).

D’ordinaire, il existe plusieurs solutions à ce problème, chacune étant associée à un


flot compatible sur ce réseau. Toutefois, le flot max est associé à la solution utilisant
le plus de valeurs supérieures alors que le flot min est associé à la solution utilisant
le plus de valeurs inférieures.

La figure suivante illustre ce modèle sur un exemple simple.

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 :

17; 2 12; 7 11; 3


Sommes des colonnes :

16; 3 10; 4 14; 5

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

Problème de transport simple

Soit n sites de fabrication Fi de m produits Pk devant être acheminés vers q sites de


consommation Cj . Chaque couple (Fi ; Pk ) est caractérisé par la capacité de production
fik . Réciproquement, chaque couple (Cj ; Pk ) est muni de la demande djk en produit Pk
sur le site Cj . Finalement, chaque couple Fi; Cj est défini par le coût d’acheminement
ckij d’un produit depuis son site de fabrication vers le lieu de consommation ainsi que
par lijk et ukij , quantités respectives minimales et maximales et par produit devant être
délivrées d’un site à l’autre. Ces quantités modélisent des contraintes qui peuvent
être du type contractuel (pour les limites inférieures) ou bien refléter la saturation
des lignes de transport.

Ce problème ultra classique se modélise aisément comme un problème de flot de


coût minimum par le réseau suivant.

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

3. Les produits sont, quand-à-eux, représentés par deux ensembles de sommets :

– Le premier modélise les associations fabricant/produit. Chaque sommet Fi


est relié au sommet fpik si et seulement si il fabrique le produit Pk . La
capacité de ces arcs est fixée à fik , capacité maximale de fabrication du
produit k par i.
– Le second modélise les associations consommateur/produit. Chaque som-
met Cj est relié aux sommets cpjk associés aux produits qu’il consomme par
des arcs de capacité djk .

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

5.6 L’algorithme de Ford & Fulkerson

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 :

rij = uij , xij


Dans le cas général, on peut étendre cette définition en prenant en compte la valeur
du flot passant sur l’arc opposé, soit :

rij = uij , xij + xji

En effet, il est toujours possible de «gagner» du flot dans le sens i ! j en retirant


le flot présent sur l’arc (j; i).

5.6.2 Démonstration du théorème Flot max / Coupe min

La capacité résiduelle r[S; S] d’une st-coupe [S; S] s’écrit :


X
r[S; S] = rij
(i; j ) 2 (S; S)

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

Soient maintenant 2 sommets p et q appartenant tous deux à S . Il est possible de


simplifier l’expression précédente en remarquant que xpq et xqp vont apparaître des
,
deux côtés du signe , une fois lors de la somme portant sur p et une fois lors de la
somme portant sur q .

Aussi, l’on peut réécrire v :

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 :

1. Le flot est maximal

2. La coupe est de capacité minimale

5.6.3 Augmentation maximale du flot

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)

pour toute st-coupe [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)

qui est aussi égal à :

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.

Algorithme de Ford & Fulkerson sous forme manuelle

Faire xij 0 sur tous les arcs du réseau G


Calculer le réseau résiduel G(x)
C
Tant qu’il existe un chemin depuis s vers t sur G(x)
Calculer r min rij
(i;j ) 2 C
Pour chaque arc (i; j ) de G(x) :
,
rij rij r xij xij + r sur l’arc direct
rji rji + r xij xij + r sur l’arc opposé
Supprimer (i; j ) si rij = 0
Fin Pour
Fin Tant que

5.6.5 Une implémentation possible de l’algorithme de Ford &


Fulkerson

Voici l’algorithme tel qu’on le programme habituellement :

Algorithme de Ford & Fulkerson sous forme programmable

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 :

rij = 0 8 (i; j ) tel que i 2 S et j 2 S


or, par définition du graphe d’écart :

rij = (uij , xij ) + xji

En outre, par définition d’un flot :


(
xij 6 uij donc (uij , xij )> 0
xji >0
rij est donc une somme nulle de termes positifs ou nuls, ce qui signifie immédiate-
ment que les deux termes sont nuls ! Donc :

xij = uij 8 (i; j ) 2 (S; S)


xij = 0 8 (i; j ) 2 (S; S)
or :
X X
v= xij , xij
(i; j ) 2 (S; S) (i;j ) 2 (S;S
 )

en appliquant xij  S) :
= 0 8 (i; j ) 2 (S;
X
v= xij
(i; j ) 2 (S; S)

et comme xij = uij 8 (i; j ) 2 (S; S), on obtient finalement :


X
v= uij
(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 !

Ce qui nous conduit au théorème suivant :

5.2 Théorème (Condition d’optimalité d’un flot maximal)


Le flot x est maximal sur le réseau G si et seulement si le réseau résiduel G(x) ne
contient pas de chemin depuis s vers t.

50
En effet, s’il existait un tel chemin, ce serait un chemin augmentant sur lequel on
pourrait pousser du flot.

Réciproquement, supposons que G(x) ne contienne pas de chemin. L’ensemble S


des sommés marqués par l’algorithme de Ford & Fulkerson forme une st-coupe dont
la capacité est égale au flot, d’où l’optimalité.

5.6.6 Une amélioration possible

Il est possible d’ameliorer significativement les performances de l’algorithme de


Ford & Fulkerson en mettant à profit une idée de Edmonds & Karp :

Plutôt que de choisir un chemin augmentant au hasard, il faut systématiquement


considérer le plus court chemin de s vers t au sens du nombre d’arcs dans le chemin.

Cette modification garantit la terminaison de l’algorithme sur tout réseau non


dégénéré !

51
Chapitre 6

Le problème des arbres couvrants


de poids minimal

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.

Le coût d’un tel arbre est :


X
C (T ) = cij
(i;j ) 2 T

Par définition des arbres, un Arbre Couvrant est composé de n , 1 arcs.


6.2 Définition (Arbre Couvrant de Poids Minimal)
On appelle Arbre Couvrant de Poids Minimal (souvent abrégé ACM) l’arbre couvrant
qui minimise la somme des coûts des arcs qui le constituent.

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 !

6.2 Applications des ACM

6.2.1 Les problèmes de conception d’architectures

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.

Le plus souvent cette famille revient à connecter physiquement les composants en


supprimant les redondances pour avoir un système le plus simple possible : un arbre.

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.

2. La construction d’un réseau de télécommunication entre les divers établisse-


ments d’une entreprise ; chaque site étant équipé de son propre sous réseau, il
suffit ici de créer un arbre reliant l’ensemble des sites.

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.

6.2.2 Le problème des agents secrets

Soit un groupe d’agents secrets infiltrés dans un pays à surveiller. On construit


un graphe où les agents secrets sont les nœuds et les arcs représentent un couple
d’agents secrets qui se connaissent et peuvent donc se transmettre un message.

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

Cette formule n’étant pas directement utilisable, on doit transformer ce produit en


somme. Pour ceci, nous passons au logarithme. Ainsi :
Y
max (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

Le problème se résume donc à rechercher un arbre de recouvrement de poids maxi-


mal après passage au log des poids sur les arcs.

Regrouper des données en amas

Il s’agit ici de résoudre un problème de classification de données très courant en


analyse de données. L’un des secteurs d’activité le plus friand de ce type de problème
est assurément celui de la médecine.

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».

La méthodologie retenue consiste à créer un graphe complet où les patients sont


les sommets et les arcs sont valués conformément à une distance qui peut être, par
exemple, le nombre de critères différents ou bien encore des fonctions de pondération
sur chacun des critères cliniques retenus.

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.

6.3 Les conditions d’optimalité d’un ACM

Il y a deux conditions d’optimalité parfaitement duales et amenant chacune un


algorithme de résolution du problème. La première porte sur les coupes, la seconde
sur les chemins.

6.3.1 La condition d’optimalité de coupes

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 .

6.1 Théorème (Condition d’optimalité de coupes d’un ACM)


Soit T  un arbre de couverture du graphe G. T  est un ACM si et seulement si :

8 (i; j ) 2 T  cij 6 ckl 8 (k; l) 2 [S; S ] formée en retirant (i; j ) de T .

La condition est nécessaire

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

F IG. 6.1: Illustration de la coupe pour l’ACM

or comme ckl < cij , il en suit que C (T ) < C (T ) ce qui contredit l’hypothèse selon
laquelle T  était optimal.

La condition est également suffisante

En effet, soit T  un arbre satisfaisant la condition précédente et T 0 un ACM tel


6
que T  = T 0. Soit alors (i; j ) un arc de T  62
T 0.
Si l’on supprime (i; j ) de T , on crée une coupe [S; S ] telle que i 2
S et j S . 2
Ajoutons maintenant cet arc (i; j ) dans T . Il va alors y avoir création d’un cycle qui
0

contient nécessairement un arc (k; l) avec k 2


S et l S . 2
(
T Vérifie la condition d’optimalité, d’où : cij 6 ckl
Or :
T0 Est optimal, d’où : ckl 6 cij

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.

6.3.2 La condition d’optimalité de chemin

6.2 Théorème (Condition d’optimalité de chemins d’un ACM)


Un arbre de recouvrement T  est un ACM de G si et seulement si :

8 (k; l) 2 G n T  cij 6 ckl pour tout arc (i; j ) du chemin qui connecte k à l dans T.

La condition est nécessaire

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 condition est suffisante

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.

Soit T  un arbre satisfaisant la condition et (i; j ) un arc quelconque de cet arbre.


Supprimons le, on crée alors une coupe [S; S ] avec i 2
S et j S ]. 2
Soit l’arc (k; l) appartenant à [S; S ] mais n’appartenant pas à T . Comme T  est
un arbre :

1. Il existe une chemin unique dans T  permettant de joindre k à l

2. (i; j ) était le sul arc joignant S à S et appartenant à T .

On en déduit que (i; j ) appartient au chemin joignant k à l dans T . et comme T 


vérifie la condition on en déduit que cij 6 ckl .

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

6.4.1 L’algorithme de Kruskal

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.

6.4.2 L’algorithme de Prim

Très différente de l’algorithme de Kruskal, la méthode de Prim construit une coupe


et rajoute l’arc de poids minimal sortant de la coupe rajoutant ainsi dans la coupe le
sommet issu de cet arc.

6.4.3 Illustration par l’exemple

Nous allons successivement dérouler le fonctionnement des algorithmes de Krus-


kal et de Prim sur le graphe de la figure (6.2);

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

Les figures (6.3) et (6.4) illustrent respectivement les algorithmes de Kruskal et de


Prim. A chaque étape, l’arc ajouté est désigné par une flèche. Les arcs déja présents
dans l’arbre sont signalés par un trait en pointillés.

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

Ici, on ne peut sélectionner ni 35


(2,3) ni (4, 5) car ils créeraient un
cycle. On se rabat donc sur (1, 2) 1 25 20 30
et l'algorithme est terminé !
40

3 15 5

F IG. 6.3: Fonctionnement de l’algorithme de Kruskal sur le graphe (6.2)

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

F IG. 6.4: Fonctionnement de l’algorithme de Prim sur le graphe (6.2)

60
Bibliographie

[1] R.K. Ahuja, T.L. Magnanti, and J.B. Orlin. Network Flows : Theory, Algorithms,
and Applications. Prentice Hall, New York, 1993.

[2] M. Gondran and M. Minoux. Graphes et Algorithmes. Eyrolles, Paris, 1979.

[3] M. Minoux and G. Bartnik. Graphes, Algorithmes et Logiciels. Eyrolles, Paris,


1986.

[4] M. Sakarovitch. Optimisation Combinatoire, Tome 1 : Graphes et Programmation


Linéaire ; Tome 2 : Optimisation Combinatoire. Hermann, Paris, 1984.

61

You might also like