Graphe Notes
Graphe Notes
Graphe Notes
Mathieu S ABLIK
Table des matières
IV Problèmes de coloriages 35
IV.1 Coloriage de sommets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
IV.1.1 Position du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
IV.1.2 Exemples d’applications . . . . . . . . . . . . . . . . . . . . . . . . . . 35
IV.1.3 Nombre chromatique de graphes classiques . . . . . . . . . . . . . . 36
IV.2 Résolution algorithmique pour le coloriage de sommets . . . . . . . . . . . . 36
IV.2.1 Algorithme glouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
IV.2.2 Algorithme de Welsh-Powell . . . . . . . . . . . . . . . . . . . . . . . 37
IV.2.3 Existe t’il un algorithme pour trouver le nombre chromatique d’un
graphe ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
IV.3 Encadrement du nombre chromatique . . . . . . . . . . . . . . . . . . . . . . 39
IV.4 Coloration des arêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
IV.5 Théorie de Ramsey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
V Graphes planaires 45
V.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
V.2 Le théorème de Kuratowski . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
V.3 Coloration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
V.4 Croisements, épaisseur et genre . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1 2 G = (S, A) où
— S = {1, 2, 3, 4},
— A = {(1, 2), (2, 1), (2, 4), (3, 4), (3, 3)}.
4 3
1 2 G = (S, A) où
— S = {1, 2, 3, 4},
— A = {{1, 2}, {2, 4}, {3, 4}, {3}}.
4 3
a
1 2 G = (S, A, α) où
b
— S = {1, 2, 3, 4},
c — A = { a, b, c, d, e, f , g, h},
d f a 7→ {1, 2}
b 7→ {1, 2}
4 e 3 g c 7→ {2, 4}
— α: d 7→ {2, 4} .
e 7→ {3, 4}
f 7→ {3}
g 7→ {3}
Si un arc ou une arête à ses deux extrémités constituées du même sommet, on dit que
c’est une boucle.
Un graphe est simple s’il est non-orienté, s’il a au plus une arête entre deux sommets
et s’il n’a pas de boucle.
L’ordre d’un graphe est le nombre de sommets |S| et la taille d’un graphe est le nombre
d’arêtes ou d’arcs.
On appèle valuation sur les sommets (resp. sur les arcs ou arêtes) toutes fonctions pre-
nant en argument les sommets (resp. sur les arcs ou arêtes) et renvoyant un réels ou élé-
ment dans un ensemble donné.
Soit G = (S, A) un graphe orienté, on associe le graphe non orienté G 0 = (S, A0 ) ayant
le même ensemble de sommets S et dont l’ensemble d’arêtes A0 vérifie { x, y} ∈ A0 ⇐⇒
( x, y) ∈ A ou (y, x ) ∈ A.
Exemple I.3. Les trois graphes suivants
2 D
3 B
1 A
4 E
5 C
I.2.3 Degré
Pour un graphe orienté, on appèle degré entrant d’un sommet s, noté d− (s) (resp. degré
sortant d’un sommet s, noté d+ (s)) le nombre d’arcs dont le sommet est prédécesseur (resp.
successeur).
Pour un graphe non-orienté, on appelle degré d’un sommet s, noté d(s) le nombre
d’arêtes dont le sommet est une extrémité.
Théorème I.1 Lemme de la poignée de main
Soit G = (S, A) un graphe orienté. On alors les égalités suivantes :
X X
d+ (s) = d − ( s ) = | A |.
s∈S s∈S
Démonstration : Pour un graphe orienté G = (S, A), chaque arc a un successeur et un prédé-
cesseur d’ou la première égalité.
Pour obtenir la deuxième égalité, il suffit d’orienté le graphe non-orienté et remarquer
que pour chaque sommet d(s) = d+ (s) + d− (s).
Une conséquence directe de ce théorème est que dans un graphe, le nombre de som-
mets dont le degré est impair est toujours pair.
Corollaire I.2
Dans un graphe, le nombre de sommets dont le degré est impair est toujours pair.
9 I.3. Différents modes de représentation d’un graphe
1 1 1 1
2 3 4 5 3 4 5 2 3 2 3 4 5
G G1 G2 G3
1 2
4 3
5 6
Chapitre I. D IFFÉRENTES NOTIONS DE GRAPHES 10
1 2 Sommets Successeurs
1 2
2 1,4
3 3,4
4 ∅
4 3 Sommets Prédecesseurs
1 2
2 1
La représentation sous forme de liste est : 3 3
LS = (2, 1, 4, 3, 4) TS = (1, 2, 4, 6, 6) 4 2,3
4 3 4 3
Ö è Ö è
1 2 0 1 0 0 1 2 0 1 0 0
1 0 0 1 1 0 0 3
M= M=
0 0 1 1 0 0 2 1
0 1 1 0 0 3 1 0
4 3 4 3
I3 I4 I5 I6 I7
C3 C4 C5 C6 C7
K3 K4 K5 K6 K7
A B C
1 2 3
K3,3
K4
I.4.6 Arbres
Définition I.3. Un arbre se définit de manière inductive par :
— le graphe formé par un sommet est un arbre ;
— si G = (S, A) est un arbre, alors pour s ∈ S et x un élément quelconque n’appar-
tenant pas à S, le graphe G 0 = (S ∪ { x }, A ∪ {{ x, s}}) est un arbre.
Un exemple d’arbre :
Remarque I.1. A la section III on verra une définition équivalente liée à la connexité.
Chapitre I. D IFFÉRENTES NOTIONS DE GRAPHES 14
Chapitre II
Problèmes de chemins dans un graphe
On appellera :
Chemin (resp. chaîne) simple : un chemin (resp. chaîne) dont tous les arcs (resp. arêtes)
sont différents.
Chemin (resp. chaîne) élémentaire : un chemin (resp. chaîne) dont tous les sommets sont
différents sauf peut être le départ et l’arrivée (pour autoriser les circuits ou cycles).
Circuit dans un graphe orienté : un chemin simple finissant à son point de départ.
Cycle dans un graphe non-orienté : une chaîne simple finissant à son point de départ.
II.2 Connexité
Définition II.2 (Connexité et forte connexité). Un graphe non-orienté est connexe si pour
tout couple de sommets s et s0 , il existe une chaîne reliant s à s0 .
Un graphe orienté est connexe si le graphe non orienté associé est connexe. Un graphe
orienté est fortement connexe si pour tout couple de sommets s et s0 , il existe une chemin
reliant s à s0 .
Exemple II.2 (Graphe connexe et fortement connexe). G1 est fortement connexe tandis que
G2 est connexe mais non fortement connexe.
A B A B
C C
G1 G1
Une arrête e d’un graphe connexe G = (S, A) est un pont ou isthme si X − e (graphe
obtenu en supprimant l’arête e) n’est pas connexe.
Proposition II.1
Soit G = (S, A) un graphe connexe, une arête est un pont si elle ne se trouve sur
aucun cycle.
Démonstration : ⇐ : Soit s et s0 les extrémités de e. Si e n’est pas un pont, il existe une chaîne
s = s0 , s1 , s2 , . . . sn = s0 allant de s à s0 dans G − e. Ainsi en rajoutant e on obtient un cycle
sur G.
⇒ : Supposons que e est sur un cycle C, on va montré que G − e est connexe. Soit s, s0
deux sommets de G − e, comme G est connexe il existe une chaîne reliant s à s0 dans G. Si e
n’apparait pas dans cette chaîne alors on a une chaîne dans G − e. Si e apparait dans cette
chaîne, il suffit d’enlever l’arête e et la remplacer par la partie du cycle C qui ne contient
pas e.
Définition II.3. Etant donné un graphe G = (S, A), un sous-graphe induit par les sommet
d’une classe d’équivalence est une composante connexe de G.
Autrement dit, une composante connexe C d’un graphe G = (S, A) est un sous-
ensemble maximal de sommets tels que deux quelconques d’entre eux soient reliés par
une chaîne (resp. un chemin). Formellement, si s ∈ C alors on a :
— pour tout s0 ∈ C il existe une chaîne (resp. un chemin) reliant s à s0 ,
— pour tout s0 ∈ S \ C, il n’existe pas de chaîne (resp. chemin) reliant s à s0 .
~ = (S, A) un graphe orienté, on définit la
De même pour un graphe orienté, soit G
~
relation RG~ sur S par
D A 1
E F 7
6
G1 G2
3
2
A B
4
5
C
7
6
G1 G2
Théorème II.3
On a κ ( G ) ≤ λ( G ) ≤ δ( G ).
Démonstration : Si le degré minium est δ( G ) alors les δ( G ) d’un sommet réalisant ce mini-
mum réalise une coupe. On a donc λ( G ) ≤ δ( G )
Soit A0 un ensemble minimal d’arête tel que G − A0 ne soit pas connexe. S’il existe s ∈ S
qui ne soit incident à aucune arête de A0 , on note C la composante connexe qui le contient.
Soit S0 l’ensemble des sommet qui incident à une arête de A0 .
G
Théorème II.4
Soit S1 et S2 deux sous-ensemble de S d’un graphe G = (S, A). Le nombre maximal
de chemin disjoints allant de S1 est égal au cardinal du plus petit ensemble séparant
S1 et S2 .
Démonstration : ⇐ : Si toute paire de sommet est connectée par k chemins indépendant alors
si on enlève k − 1 sommet, tout paire reste connectée. On en déduit que κ ( G ) ≥ k.
⇒ : Si un graphe est k connexe, lorsqu’on enlève k − 1 sommets, le graphe reste connexe.
Ainsi pour toute paire de sommet, d’après la question précédente, on peut trouver k chaines
distinctes les reliant.
Ville de Königsberg G
Définition II.7. Soit G un graphe non orienté. Une chaîne (resp. un cycle) eulérienne est
une chaîne (resp. un cycle) qui passe une et une seule fois par toutes les arêtes de G.
On définit les mêmes notions pour un graphe orienté G : un chemin (resp. un circuit
eulérien) est un chemin (resp. un circuit) passant une et une seule fois par tous les arcs de
G.
Exemple II.5. Le graphe G1 admet un cycle eulérien. Le graphe G2 admet un chemin eulé-
rien mais pas un circuit.
G1 G2
Proposition II.6
Un graphe dont tous les sommets sont de degré supérieur ou égal à 2 possède au
moins un cycle.
Théorème II.7
Soit G = (S, A) un graphe non orienté connexe. Il admet un cycle eulérien si et
seulement si d(s) est pair pour tout s ∈ S.
Si seulement deux sommets ne vérifient pas les conditions précédentes alors G
admet une chaîne Eulériene.
Démonstration : Soit G = (S, A) un graphe connexe. Pour qu’il admette un cycle Eulérien il
faut qu’en chaque sommet lorsqu’on arrive par une arête on puisse repartir par un autre
arête. On obtient donc que d(s) est pair si le graphe est orienté pour chaque sommet s ∈ S.
Réciproquement, on démontre par récurrence sur le nombre d’arcs que pour un graphe
connexe G, si chaque sommet s ∈ S est de degré pair alors G admet un cycle eulérien.
Initialisation : Si | A| = 0, on a un graphe connexe sans arêtes, c’est à dire un seul
sommet isolé qui admet un cycle eulérien.
Induction : On suppose que le théorème est vrai pour tout graphe ayant un nombre
d’arêtes inférieur ou égal à n (hypothèse de récurrence forte). Soit G = (S, A) un graphe
connexe tel que | A| = n + 1 et pour chaque sommet s ∈ S est de degré pair. Comme le
graphe est connexe et que le degré de chaque sommet est pair, on en déduit que G admet
un cycle élémentaire C = (s1 , s2 , . . . , sk , s1 ).
Soit G 0 le sous-graphe de G auquel on a supprimé les arêtes de C. Le graphe G 0 n’est
pas forcément connexe mais vérifie d(s) pairs pour chacun de ses sommet s. On applique
l’hypothèse de récurrence sur chacune de ses composantes qui admettent donc des cycles
eulériens. On combine alors ces différents cycles eulériens avec le cycle C, pour former un
cycle eulérien sur G de la façon suivante : on parcourt C depuis un sommet initial arbitraire
et, à chaque fois que l’on rencontre une des composantes connexes de G 0 pour la première
fois, on insère le cycle eulérien considéré sur cette composante. S’agissant d’un cycle, on
est assuré de pouvoir poursuivre le parcours de C après ce détour. Il est facile de vérifier
qu’on a ainsi bien construit un cycle eulérien sur G.
Si G admet une chaîne Eulérienne et admet un sommet de degré impair, soit c’est le
point de départ de la chaîne, soit il arrive un moment où l’on ne pourra plus repartir ce
qui constitue le sommet terminal de la chaîne. Ainsi, si seulement deux sommets sont de
degré impair il peuvent servir de point de départ et d’arrivé d’un chemin passant par tous
les arêtes du graphe, le graphe peut donc admettre une chaîne Eulérienne.
G1 G2 G3 G4
Démonstration : Soit C un cycle Hamiltonien du graphe G. Alors pour tout ensemble de som-
met X ⊂ V on a comp(C − X ) ≥ comp( G − X ) puisque tout les sommet de X apparaissent
dans C et G a plus d’arêtes que C.
De plus | X | ≥ comp(C − X ). En effet si | X | = 1 on a comp(C − X ) = 1 = | X |,
ensuite, le retrait d’un sommet dans une chaîne laisse la chaîne connexe s’il s’agit d’une
extrémité ou bien le coupe en deux s’il s’agit d’un sommet intérieur. Par récurrence on a
| X | ≥ comp(C − X ).
On a donc | X | ≥ comp(C − X ) ≥ comp( G − X ).
Proposition II.10
Soit G = (V, A) un graphe simple non orienté. Si pour toute paire de sommets non
adjacent u, v ∈ V on a d(u) + d(v) ≥ |V | alors G admet un cycle hamiltonien.
Corollaire II.11
|V |
Soit G = (V, A) un graphe tel que tout sommet soit de degré plus grand que 2 ,
alors G admet un cycle hamiltonien.
Corollaire II.12
Soit G = (V, A) un graphe simple non orienté. Si pour toute paire de sommets non
adjacent u, v ∈ V on a d(u) + d(v) ≥ |V | − 1 alors G admet une chaîne hamiltonienne.
Ainsi S = S1 t S2 . Montrons par l’absurde qu’il n’y a aucune arête entre Si et Si pour
i = 1 et 2. Supposons donc qu’il existe une arête entre s0 et s00 deux sommets de S1 . Il existe
un chemin de s à s0 de longueur paire et un chemin de s à s00 de longueur paire. En fermant
avec l’arête {s0 , s00 }, on obtient un cycle.
Chapitre III
Graphes acycliques ou sans-circuits
Proposition III.1
Un graphe connexe d’ordre n comporte au moins n − 1 arêtes.
Proposition III.2
Un graphe dont tous les sommets sont de degré supérieur ou égal à 2 possède un
cycle. En particulier, un graphe acyclique admet un sommet de degré 0 ou 1.
Nous pouvons lier cette fois l’absence de cycle dans un graphe avec le nombre d’arêtes.
Proposition III.3
Un graphe acyclique à n sommets possède au plus n − 1 arêtes.
Chapitre III. G RAPHES ACYCLIQUES OU SANS - CIRCUITS 24
Définition III.1. Un arbre est un graphe non orienté, connexe, sans cycle.
Une forêt est un graphe non orienté sans cycle (chacune de ses composantes connexes
est un arbre).
Les sommets de degré 1 ou 0 sont appelés feuilles, les autres sommets sont appelés
noeuds.
Théorème III.4
Soit G un graphe non orienté à n sommets. Les propositions suivantes sont équi-
valentes :
— G est connexe sans cycle ;
— G est connexe et a n − 1 arêtes ;
— G est connexe et la suppression de n’importe quelle arête le déconnecte ;
— G est sans cycle et a n − 1 arêtes ;
— G est sans cycle et l’ajout de n’importe quel arête crée un cycle ;
— entre toute paire de sommets de G il existe une unique chaîne élémentaire ;
— G est défini de manière inductive comme à la définition I.3.
Théorème III.5
Tout graphe connexe peut s’obtenir par ajout d’un certain nombre d’arêtes à un
arbre ayant le même nombre de sommets.
Remarque III.1. Un graphe orienté sans circuit n’est pas forcément un arbre orienté.
On appellera :
— racine de l’arbre : le sommet qui n’a pas de prédécesseur
— feuilles de l’arbre : les sommets qui n’ont pas de successeur ;
— nœuds de l’arbre : tous les autres sommets ;
— branche de l’arbre : tout chemin de la racine vers une feuille,
— descendant de s : les successeurs de s,
— ascendant de s : le prédécesseur de s.
Lorsque chaque sommet a au plus 2 successeurs on parle aussi d’arbre binaire.
Proposition III.7
Un arbre à n sommets peut être défini par une liste de n éléments, appelé liste des
prédécesseurs, qui contient le prédécesseur de chaque sommet (ou ∅ pour la racine de
l’arbre) :
∅
(
si s est la racine de l’arbre
pour tout s ∈ S on pose Pred(s) =
s0 si (s0 , s)
Ainsi stocker un arbre n’est pas trop gourmand d’un point de vu informatique.
Exemple III.1. La liste Pred = [∅, 1, 1, 2, 3, 2, 3, 5, 3, 6, 4, 4, 7, 8, 14, 10] représente l’arbre sui-
vant :
r (s) 0 1 2 3 4 5
6 10 16
2
11
4
12
1
5 8 14 15
3 7 13
9
Chapitre III. G RAPHES ACYCLIQUES OU SANS - CIRCUITS 26
Le sommet 1 est la racine, les sommets 9, 11, 12, 13, 15 et 16 sont les feuilles, une branche
de l’arbre est (1, 3, 5, 8, 14, 15).
Théorème III.8
Un graphe orienté G est sans circuit si et seulement si on peut attribuer à chaque
sommet s un nombre r (s), appelé le rang de s, tel que pour tout arc (s, t) de G on ait
r ( s ) < r ( t ).
Démonstration : Si G = (S, A) comporte un circuit C, il n’est pas possible de trouver une telle
R
fonction r : S → . Sinon, il existe t ∈ S tel que r (t) = max {r (s) : s ∈ C } et en considérant
l’arc (t, u) ∈ C, on aurait r (t) ≤ r (u) ce qui est en contradiction avec la définition du rang.
Réciproquement, si G n’a pas de circuit, il existe au moins un sommet sans prédéces-
seur dans G (sans cela, en remontant successivement d’un sommet à un prédécesseur, on
finirait par fermer un circuit). Ainsi, on peut attribuer séquentiellement des valeurs aux
sommets du graphe à l’aide de l’algorithme 1, ce qui conclura la démonstration.
rang← 0;
X ← S;
R ← ensemble des sommets de X sans prédécesseur dans X ;
while X 6= ∅ do
r (v) ← rang pour tout sommet v ∈ R;
X ← X \ R;
R ← les sommets sans prédécesseur du graphe induit par les sommets X ;
r ← r + 1;
quasiment tous les jeux de cartes ou de dés). A deux joueurs signifie que les deux joueurs
jouent à tour de rôle (ce qui exclut des jeux type pierre-feuille-ciseau). A information com-
plète signifie que à tous moments les joueurs ont accès à l’état exact du jeu, il n’y a pas
d’éléments cachés.
Cette classe de jeux comprend par exemple les échecs, les dames, le jeu de go, othello,
puissance 4, morpion, tic-tac-toe, jeu de petits carreaux...
III.2.2 Modélisation
Etant donné un jeu combinatoire à information parfaite à deux joueurs, on lui associe
un graphe orienté de la façon suivante (on laisse de côté la possibilité de parties nulles) :
— l’ensemble des sommets est l’ensemble des états possibles du jeu,
— deux sommets sont reliés par un arc s’il existe un coup amenant de la première
position à la deuxième.
Il existe des parties qui ne se termine jamais si et seulement si le graphe admet un cycle.
C’est pour cela que certain jeux comme le go ou les échecs interdisent de se retrouver
plusieurs fois dans la même situation.
Si le jeu admet des parties nulles, on peut modifier le problème en considérant que le
joueur ne doit pas perdre.
Remarque III.2. Si on joue à qui perd gagne à un jeu combinatoire à information parfaite à
deux joueurs, alors on peut se ramener à un jeu combinatoire à information parfaite.
Définition III.3. Soit G = (S, A) un graphe orienté, on dit que N ⊂ S est un noyau de G
s’il vérifie :
— pour tout s ∈ N les successeurs de s ne sont pas dans N (on dit que N est stable),
— pour tout s ∈ S \ N alors s admet un successeur dans N (on dit que N est absor-
bant).
B C B C D B A
D
D E F D E C E
Démonstration : On montre qu’un joueur qui peut choisir s dans le noyau ne peut pas perdre.
Si s n’a pas de successeur, l’adversaire ne peut plus jouer, il a perdu. Sinon, l’adversaire va
choisir un sommet s0 dans les successeurs de s. On a s0 ∈ S \ N donc s0 admet au moins un
successeur dans N.
Théorème III.10
Un graphe orienté sans circuit possède un unique noyau.
Démonstration : On remarque que tout graphe sans circuit admet un puits et que tous les
puits doivent appartenir au noyau.
On va raisonner par récurrence sur le nombre n de sommets.
Initialisation : Si n = 1, l’unique sommet est un puits et donc le seul élément du noyau.
Induction : Soit s un puits du graphe G sans circuit. Notons P(s) l’ensemble des préde-
cesseurs de s. Par hypothèse de récurrence, le graphe G privé du sommet s et de ceux de
P(s) a un noyau unique N. On en déduit que N ∪ {s} est l’unique noyau de G.
Remarque III.3. Il est facile d’adapter l’énoncé pour prendre en compte les nulles : un des
deux joueurs a une stratégie non-perdante.
Remarque III.4. Le graphe d’un jeu est en général tellement énorme qu’il est impossible
de déterminer une stratégie gagnante (et heureusement). Un jeu est résolu quand une
stratégie gagnante a été déterminée (exemple de jeu résolu : puissance 4).
Stratégie gagnante Comme le graphe associé est sans cycle, on sait qu’un des deux
joueurs a une stratégie gagnante. Par un argument de “vol de stratégie”, on peut mon-
trer que le joueur 1 a une stratégie gagnante. En effet, supposons que le joueur 2 possède
une stratégie gagnante contre tous les premiers coups possibles du premier joueur. Sup-
posons ensuite que le joueur 1 effectue son premier coup en mangeant le carré en bas à
droite. Le joueur 2 répond avec sa stratégie gagnante en mangeant un certain carré (n, m).
Mais dans ce cas, le joueur 1 aurait pu lui-même jouer le coup (n, m) dès le début, et appli-
quer ensuite lui-même la stratégie gagnante. Ceci prouve que le deuxième joueur ne peut
pas posséder de stratégie gagnante. On parle de preuve par vol de stratégie parce que le
deuxième joueur se fait voler toute stratégie potentielle possible par le premier.
Cependant à part une exploration informatique, on ne connait pas la stratégie ga-
gnante.
29 III.2. Initiation à la théorie des jeux
Jeux de Nim
Les jeux de Nim sont des jeux très courants. Chaque jeu se joue à deux au tour par tour.
Il s’agit en général de déplacer ou de prendre des objets selon des règles qui indiquent
comment passer d’une position du jeu à une autre, en empêchant la répétition cyclique des
mêmes positions. Le nombre de positions est fini et la partie se termine nécessairement, le
joueur ne pouvant plus jouer étant le perdant (ou selon certaines variantes, le gagnant).
Le jeu de Nim trivial ou (jeu de Nim à un seul tas) Ce est constitué d’un seul tas de
n allumettes, chaque joueur prenant le nombre d’allumettes qu’il veut. Celui qui ne peut
plus prendre à perdu. La stratégie gagnante consiste évidemment à prendre toutes les
allumettes.
Le graphe associé est S = {0, . . . , n} et A = {( x, y) ∈ S2 : y < x } le noyau est réduit à
{0}.
Le jeu de Nim un peu moins trivial (Fort Boyaux) Il consiste à prendre entre 1 et m
allumette dans un tas de n allumettes. Celui qui ne peut plus prendre d’allumette a perdu.
Le deuxième joueur gagne si et seulement si m + 1 divise n.
Le graphe associé est S = {0, . . . , n} et A = {( x, y) ∈ S2 : x − m ≤ y < x } le
N
noyau est réduit à (m + 1) ∩ S. On en déduit que le joueur 1 a une stratégie gagnante si
n∈ N
/ ( m + 1) .
Le jeu de Nim un peu moins trivial inversé C’est le ‘’qui perd gagne” du jeu précédent.
Ainsi celui qui prend la dernière allumette a perdu.
Le graphe associé est S = {1, . . . , n} et A = {( x, y) ∈ S2 : x − m ≤ y < x } le noyau
N
est réduit à (m + 1) + 1 ∩ S. On en déduit que le joueur 1 a une stratégie gagnante si
n−1 ∈ N
/ ( m + 1) .
Jeu de Nim classique ou jeu de Marienbad C’est les mêmes règles que précédemment
mais avec plusieurs tas et à chaque coup, on ne peut prendre des allumette que dans un
seul tas.
Jeu de Grundy Le jeu de Grundy se joue en séparant l’un des tas en deux tas de taille
distincte, jusqu’à ce qu’il ne reste que des tas à un objet.
Jeu de Wythoff Le jeu de Wythoff se joue à deux tas. Chaque joueur réduit d’un même
nombre d’objets les deux tas à la fois, ou bien réduit un seul tas du nombre d’objets qu’il
veut.
Sprouts
Principe du jeu Sprouts (germe en anglais) se joue à deux joueurs avec un stylo et une
feuille de papier. Au départ, il y a n points sur la feuille. Chaque joueur, à tour de rôle,
relie deux points existants par une ligne et ajoute un nouveau point sur cette ligne de telle
sorte que :
— les lignes ne peuvent se croiser (le graphe doit rester planaire),
— un point ne peut pas être relié à plus de trois lignes (le degré maximal des sommets
est 3).
Chapitre III. G RAPHES ACYCLIQUES OU SANS - CIRCUITS 30
Celui qui ne peut plus jouer sans enfreindre les deux contraintes a perdu. Il existe
également une version misère, où celui qui ne peut plus jouer est cette fois le gagnant.
Le nombre de points tracés sur la feuille augmente à chaque coup, on peut donc se
demander si la partie se termine en un nombre fini de coups.
Proposition III.11
Toute partie de Sprout à partir de n sommets se termine en au plus 3n − 1 coups.
Démonstration : On appelle liberté d’un sommet s le nombre 3 − d(s). Etant donné une confi-
guration de Sprout, lorsqu’on on relie deux sommet on perd deux libertés correspondant
aux sommets reliés et on rajoute une liberté correspondant au nouveau sommet. Ainsi,
après avoir joué le nombre total de liberté a baissé de un. Le jeu s’arrête nécessairement s’il
reste une seule liberté.
Ainsi le nombre de coup correspond au plus au nombre de liberté initiale moins 1, c’est
à dire 3n − 1.
On peut aussi contrôler la durée d’une partie et montrer qu’une partie se termine au
minimum en 2n coups.
Remarque III.5. La liste L des sommets à traiter est l’exemple type d’une Pile de type FIFO
(First In, First Out) :
— on ajoute les éléments “par le bas” de la file,
— on retire les éléments “par le haut” de la file.
Le parcours en largeur explore tous les sommets accessibles depuis le sommet initial.
Il permet de calculer les composantes connexes du graphe avec une complexité linéaire.
De plus, lors de ce parcours, les sommets sont explorés par distance croissante au
sommet de départ. Grâce à cette propriété, on peut utiliser l’algorithme pour résoudre
Chapitre III. G RAPHES ACYCLIQUES OU SANS - CIRCUITS 32
le plus simple des problèmes de cheminement : calculer le plus court chemin entre deux
sommets.
Exemple III.3. On réalise un parcours en largeur de G en commençant par le sommet 1 et
en choisissant les sommet voisins dans l’ordre croissant.
5
1 2 6
2 3 4 1 3 7
5 6 7 4
Cet algorithme admet aussi une formulation récursive plus simple à programmer :
Remarque III.6. La liste L des sommets à traiter est l’exemple type d’une Pile de type LIFO
(Last In, First Out) :
— on ajoute les éléments “par le haut” de la pile,
— on retire les éléments “par le haut” de la pile.
33 III.3. Parcours dans un graphe
Marquer s;
for x voisin non marqué de s do
P(y) ← x;
ParcoursPro f ondeur ( G, x );
2 3 4 1 3 7
5 6 7
Définition IV.1. Soit G = (S, A) un graphe non orienté simple (sans boucle et pas multi-
arêtes). Un coloriage des sommets de G consiste à assigner une couleur (ou un nombre) à
chaque sommet de telle sorte que deux sommets adjacents soient de couleurs différentes.
Un graphe G est k-coloriable s’il existe un coloriage avec k couleurs.
Le nombre chromatique du graphe G, noté χ( G ) est le nombre minimal de couleurs
nécessaire pour colorier un graphe.
l’étudiant A B C D E F G H
ne s’entend pas avec B,E,F,H A,C,E,G B,D C,E,G A,D,F,H A,E,H B,D,H A,E,F,G
D B
E A
F H
Problème d’emploi du temps Pendant un festival, on veut organiser des tournois de scrable
(S), échecs (E), go (G), dames (D), tarot (T) et master-mind (M). Plusieurs personnes
se sont inscrites à la fois pour les tournois E, S, G, d’autres personnes pour les tour-
nois G, D, M, et enfin d’autres personnes pour les tournois M, T, S. Il est entendu
qu’une participation simultanée à plusieurs tournois est impossible et que les or-
ganisateurs veulent satisfaire tout le monde.
Quel est le nombre maximum de tournois qui pourraient se dérouler en même
temps ?
G E
D S
T M
Coloriage de carte On cherche à colorier une carte de telle sorte que deux pays frontaliers
soient de couleurs différentes. Pour résoudre ce problème, plus historique qu’autre
chose, on peut se ramener au coloriage d’un graphe planaire construit de la façon
suivante : les sommet correspondent aux pays et il y a une arête entre deux som-
mets si les pays correspondant sont frontaliers.
On considère ici un coloriage comme une fonction des sommets dans les entiers. L’al-
gorithme glouton nous donne facilement un coloriage du graphe, le principe consiste à
prendre les sommets les uns après les autres et pour chaque sommet s d’affecter la cou-
leur minimale qui n’apparait pas dans les voisins coloriés de s.
for s ∈ S do
ϕ(s) ← plus petite couleur non utilisé par les voisins de s;
Terminaison L’algorithme termine une fois que l’on a visité tous les sommets.
Correction A chaque fois que l’on attribue une couleur à un sommet, elle est diffé-
rentes des couleurs des sommets voisins pour lesquels on a attribué une couleur. Ainsi le
coloriage obtenu est valide.
Complexité On passe |S| fois dans la boucle, chaque fois que l’on passe dans la boucle
on regarde tous les voisins du sommet considéré, on a au plus ∆( G ) voisin à regarder où
∆( G ) est le degré maximal du graphe. Dans le pire des cas, on une complexité O(∆( G )|S|).
Il est possible d’améliorer cet algorithme en coloriant d’abord les sommets qui im-
posent le plus de contraintes (sommet de plus haut degré) et en utilisant la couleur que
l’on vient d’utiliser là ou cela est possible. On appèle ce principe l’algorithme de Welsh-
Powell. Pour certaine classe de graphe cet algorithme donne même systématiquement le
Chapitre IV. P ROBLÈMES DE COLORIAGES 38
coloriage optimal.
Algorithm 7: Algorithme de Welsh-Powell pour colorier un graphe
Data: Un graphe G = (S, A)
Result: Une coloration ϕ : S → N de G
Terminaison Il est clair que, puisque le nombre de sommets dans L (et donc non colo-
riés) diminue d’au moins une unité à chaque fois que l’on exécute la boucle.
Correction Cette algorithme fournit bien un coloriage de G, en effet chaque fois que l’on
colorie un sommet, on place dans V les sommets voisins à ce sommet de telle sorte que
l’on ne colorie plus de cette couleur les sommets de V. Ainsi deux sommets voisins sont
de couleurs différentes.
Complexité De manière grossière, on passe |S| fois dans la boucle while puis |S| fois
dans la boucle for, on a donc une complexité grossière en O(|S|2 ). Cependant, on peut
être plus précis. Dans la preuve de la proposition IV.2, on voit que l’on passe au maximum
∆( G ) + 1 fois dans la boucle while. On a donc une complexité en O(∆( G )|S|).
Proposition IV.2
Soit ∆( G ) le degré maximal d’un graphe G, on a χ( G ) ≤ ∆( G ) + 1.
Démonstration : Soit s le dernier sommet colorié par l’algorithme 6. Si s n’a pas été colorié
avant, c’est que pour chacune des couleurs précédentes, un sommet adjacent à s a été
colorié de cette couleur. Par suite, le nombre de couleurs utilisées avant de colorier s ne
peut dépasser d(s). Ainsi, en tenant compte de la couleur de s, on déduit que le nombre
total de couleurs utilisées par l’algorithme ne dépasse pas d(s) + 1.
A t’on un coloriage optimal avec cet algorithme ? Là encore il existe des exemples ou
cet algorithme n’est pas optimal même si dans la majorité des cas il donne un coloriage
optimal, par exemple le graphe ci-dessous :
39 IV.3. Encadrement du nombre chromatique
IV.2.3 Existe t’il un algorithme pour trouver le nombre chromatique d’un graphe ?
On cherche un algorithme qui prend en argument un graphe G = (S, A) et renvoie
le nombre chromatique de ce graphe. Pour cela on teste tous les 2-coloriages, il y en a
2|S| s’il y a en a un valide, on a χ( G ) = 2, sinon on teste tous les 3-coloriages et ainsi de
suite. L’algorithme termine car il y a un coloriage à ∆( G ) + 1 couleurs et il nous donne un
coloriage optimal car on a essayer toutes les possibilités avec moins de couleurs.
Cependant cet algorithme a une complexité en O((∆( G ) + 1)|S| ) dans le pire des cas,
cette complexité est par exemple atteinte pour le graphe complet. Cette complexité est
exponentielle en la taille du graphe et en pratique, pour des graphes un peu grand, il faut
attendre des temps extrêmement long pour le voir terminer. On estime que les complexités
qui permettent d’avoir un algorithme utilisable sont les complexité en O(nd ) pour une
valeur d donnée. Pour le problème du nombre chromatique on ne sait pas s’il existe un
algorithme polynomial qui permet de le résoudre.
Toutefois, il existe des classes de graphes pour lesquelles l’algorithme glouton (et donc
de complexité polynomiale) donne même systématiquement le coloriage optimal. En TD
on verra qu’un algorithme glouton avec un bon ordre sur les sommets donne un coloriage
optimal pour les graphes d’intervalles.
Remarque IV.1. En général on s’intéresse aux problèmes de décisions, par exemple :
Z
Problème 1 : Etant donné a, b, c ∈ , est ce que ax2 + bx + c = 0 admet une solution
rélle ?
Problème 2 : Etant donné un graphe G est ce que G admet un 3-coloriage ?
On s’intéresse aux complexités qui résolvent ces problèmes, on définit les classes de
problèmes suivant :
— Classe P : classe de problèmes que l’on peut résoudre en temps polynomial (par
exemple Problème 1) ;
— Classe N P : classe de problèmes tel que si on donne une solution on peut vérifier
que c’est bien une solution du problème (par exemple Problème 2) ;
— Classe E xp : classe de problèmes que l’on peut résoudre en temps exponentiel.
On a P ⊂ N P ⊂ E xp. On sait que P 6= E xp mais on ne sait pas si P = N P , c’est le
problème ouvert de l’informatique théorique.
Il existe une autre classe, la classe des problèmes N P -complet, ce sont les problèmes
tels que si on les résout en temps polynomial, on résout tous les problèmes N P en temps
polynomial. En particulier le problème de 3-coloriage est N P -complet.
ω ( G ) ≤ χ( G ) ≤ ∆( G ) + 1.
Proposition IV.4
Soit G = (S, A) un graphe simple, on a :
¢ •
|S|
χ( G ) ≥ et χ( G ) + α( G ) ≤ |S| + 1.
α( G )
Proposition IV.5
Soit G un graphe simple, on a :
Corollaire IV.6
Soit G un graphe simple connexe qui n’est pas régulier alors
χ ( G ) ≤ ∆ ( G ).
Une question intéressante est de savoir quels graphe ne vérifie pas l’inégalité due co-
rollaire précédent. Le théorème de Brooks montre que les exceptions sont des graphes
particuliers.
41 IV.4. Coloration des arêtes
Définition IV.3. Soit G = (S, A) un graphe non orienté simple (sans boucle et pas multi-
arêtes). Un coloriage des arêtes de G consiste à assigner une couleur (ou un nombre) à
chaque arêtes de telle sorte que deux arêtes adjacentes soient de couleurs différentes. Un
graphe G est k-coloriable par les arête s’il existe un coloriage des arêtes avec k couleurs.
L’indice chromatique du graphe G, noté χ0 ( G ), est le nombre minimal de couleurs né-
cessaire pour colorier les arêtes d’un graphe.
Démonstration :
Théorème IV.9 Vizing 1964
Soit G un graphe simple, on a :
∆( G ) ≤ χ0 ( G ) ≤ ∆( G ) + 1.
n −1
Démonstration : Soit n impair. Dans le meilleur des cas, on peut construire 2 paires de
sommets disjointes donc
n−1 n ( n − 1)
χ0 ( Kn ) ∗ ≥
2 2
On en déduit que χ0 (Kn ) ≥ n = ∆(Kn ) + 1. En fait on a égalité d’après le théorème
précédent.
Soit n pair. On considère un sommet s et on colorie le graphe complet Kn − s avec n − 1
couleurs. A chaque sommet de Kn − s il manque une unique couleur et tout les sommets
ont forcément une couleur manquante différente. On en déduit que l’on peut relier chaque
sommet à s avec la couleur manquante correspondante. Dans ce cas χ0 (Kn ) = n − 1.
Définition IV.4. Etant donné deux entier s et t on définit R(s, t) comme le plus petit entier
n (s’il existe) tel que lorsqu’on colorie les arêtes de Kn en rouge et bleue, on trouve toujours
une copie de Ks rouge ou bien une copie de Kt bleue.
Autrement dit tout graphe avec plus de R(s, t) sommets admet une clique de taille s
ou r sommets indépendants.
On a clairement R(s, t) = R(t, s), il suffit d’inverser le rôle des couleurs des arêtes. On
a aussi R(1, s) = R(s, 1) = 1 car K1 n’admet pas d’arêtes. De plus R(2, s) = R(s, 2) = s, en
effet s − 1 < R(2, s) car en coloriant les arêtes de Ks−1 toutes en rouge on ne trouve ni un
K2 bleu, ni un Ks rouge.
R(3, 3)
43 IV.5. Théorie de Ramsey
−2 s −1 s −1
R(s, t) ≤ R(s − 1, t) + R(s, t − 1) ≤ Css+ t−3 + Cs+t−3 = Cs+t−2
Proposition IV.12
On a R(3, 3) = 6, R(3, 4) = 9 et R(3, 5) = 14.
Démonstration :
Proposition IV.13
Pour s, t ∈ N∗ , on a
R(s, t) ≥ (s − 1)(t − 1) + 1.
Théorème IV.14
Pour r ≥ 3, on a
r
2 2 ≤ R(r, r ) ≤ 22r−2
Chapitre IV. P ROBLÈMES DE COLORIAGES 44
2
r −Cr N r − r (r −1) r 2 − r +1 − r (r −1) −r 1
p ≤ CN 2 ≤ r − 1
2 2 <2 2 = 2 2 +1 ≤ .
2 2
R(4, 4) = 18
43 ≤ R(5, 5) ≤ 49
35 ≤ R(6, 4) ≤ 41 58 ≤ R(6, 5) ≤ 87 102 ≤ R(6, 6) ≤ 165
49 ≤ R(7, 4) ≤ 61 80 ≤ R(7, 5) ≤ 87 113 ≤ R(7, 6) ≤ 298 205 ≤ R(7, 7) ≤ 540
On conjecture qu’il existe une constante c telle que tel que R(r, r ) ∈ Θ(2cr ), mais cela
semble actuellement hors d’atteinte.
Théorème IV.15
(Hales-Jewett, 1963) Soit r ≥ 2 et c ≥ 2 fixés. Il existe un entier N tel que tout
coloriage des points de l’hyper-cube {1, 2, ..., r }n pour n ≥ N avec c couleurs admet
une ligne, une colonne ou une diagonale monochrome.
Les graphes planaires sont une classe graphe avec des propriétés intéressantes du
point de vu du coloriage.
V.1 Généralités
Définition V.1 (Graphe planaire). Un graphe G = (S, A) est planaire s’il existe une repré-
sentation dans le plan où les arêtes ne s’intersectent pas.
Exemple V.1. Les graphes suivant sont planaire si on déplace les sommets
Soit G un graphe planaire et on fixe une représentation planaire de ce graphe. Une face
de cette représentation planaire est une des régions du plan délimitées par le dessin du
graphe. Etant donné une face F, son bord est le plus court chemin fermé passant par toutes
les arêtes qui touchent la face (le bord peut avoir à parcourir certaines arêtes plusieurs
fois). Le degré d’une face est la longueur de son bord.
Lorsqu’on fait la somme des degré des faces, chaque arête est compté deux fois, on
obtient : X
deg( F ) = 2a.
F face
s − a + f = 2.
Chapitre V. G RAPHES PLANAIRES 46
s−a+ f = 1+k
Proposition V.2
K5 n’est pas planaire.
Démonstration : Supposons que K5 admet une représentation planaire. Chaque face admet
au moins 3 arêtes sur chaque bords. On a donc : 2a = F face deg( F ) ≥ 3 f .
P
Proposition V.3
K3,3 n’est pas planaire.
Démonstration : Supposons que K3,3 admet une représentation planaire. Chaque face admet
au moins 4 arêtes sur chaque bords car le graphe est biparti. On a donc : 2a = F face deg( F ) ≥
P
4f.
Par la formule d’Euler, on a 2a ≥ 4(2 − s + a) donc 2s ≥ a + 4 ce qui est contradictoire
avec s = 6 et a = 9.
pour réaliser ce coloriage ? Cette question a été posée dès 1852 par Francis Guthrie pour
le coloriage des comtés (counties) d’Angleterre, observant que 4 couleurs sont suffisantes
dans ce cas précis.
Pour modéliser ce problème, on considère le cas où chaque territoire est connexe (d’un
seul tenant), et deux territoires sont colorés différemment s’ils partagent une frontière
commune (pas seulement un point). Alors la question peut-être comprise comme un pro-
blème d’évaluation d’un nombre chromatique : un territoire est un sommet du graphe,
une arête signifie que deux territoires partagent une frontière. Mais les graphes considé-
rés ont alors une propriété très particulière : il est possible de les représenter dans le plan
de manière à ce que les arêtes ne s’intersectent qu’aux extrêmités...
Le nombre de couleur maximal pour colorier les sommets d’un graphe planaire est
4. Ce théorème est connu comme l’un des premiers ou la preuve nécessite un ordinateur
pour explorer l’explosion combinatoire des différents cas de base.
Théorème V.4
Tout graphe planaire est coloriable avec 4 couleurs, son nombre chromatique est
donc inférieur ou égal à 4.
Nous allons montrer le résultat qu’un graphe planaire est coloriable avec 5 couleurs.
Proposition V.5
Tout graphe planaire admet un sommet de degré 5.
Démonstration : Il suffit de travailler sur une composante connexe. On note s1 , . . . , sn les som-
mets de G. Par l’absurde supposons que, pour tout i, on ait d(si ) ≥ 6, alors 2a = i d(si ) ≥
P
6s et donc 3s ≤ a. Puisque G est planaire, on sait que a ≤ 3s − 6. Cela conduit à a ≤ a − 6,
ce qui est clairement absurde. La conclusion en découle.
Cr( G ) ≥ | E| − 3|V |
Proposition V.8
Soit G = (V, E) un graphe simple avec | E| ≥ 4|V |, on a :
| E |3
Cr( G ) ≥
64|V |2
0 ≤ E( X − A + 3S)
≤ E( X ) − E( A) + 3E(S))
0 ≤ p4 Cr( G ) − p2 a − 3ps
et ainsi
a 3s
Cr( G ) ≥ − 3
p2 p
4s a3
En prenant p = a on obtient Cr( G ) ≥ 64s2
L’ épaisseur, noté Ep, est le plus petit nombre de graphe partiels planaire tel que l’union
de ces graphe permet de reconstruire le graphe initial.
49 V.4. Croisements, épaisseur et genre
Proposition V.9
Soit G = (V, E) un graphe simple avec au moins 3 sommets, on a :
¢ •
| E|
Ep( G ) ≥
3|V | − 6
On note γ( G ) le genre minimal de la surface sur lequel un graphe peut être plongé.
On peut montrer que s − a + f = 2 − γ( G ) et γ( G ) ≤ Cr( G ).
Chapitre V. G RAPHES PLANAIRES 50
Chapitre VI
Un peu de théorie algébrique des graphes
La distance entre deux sommets i et j est le plus petit n ∈ tel que le coefficient N
n
d’indice (i, j) de M soit non nul.
N
Le diamètre de G est le plus petit n ∈ tel que tous les coefficients de ( M + Id)n
soient non nul.
Démonstration : Seul le deuxième point est non trivial. Cela vient du fait que
n
X
( M + Id)n = Cnr Ar .
r =0
Exemple VI.1. On cherche à compter le nombre de cycles de longueur k dans Kn,n . Par
exemple, pour n = 3 on a le graphe suivant :
á0 0 0 1 1
ë
1
0 0 0 1 1 1
0 0 0 1 1 1
A=
1 1 1 0 0 0
1 1 1 0 0 0
1 1 1 0 0 0
Ç å Ç å
n k −1 0 0 n k −1
Si k est pair :Ak= k − 1 et si k est impair : Ak = k − 1
0 n n 0
k
Comme A(i,j) correspond au nombre de chemin de i à j de longueur k, le nombre de
cycles de longueur k est donc :
2n
2n × nk−1 = 2nk
(
X
k si k est pair
Ai,i =
i =1 0 sinon.
Dans cette section on considère un graphe G = (S, A) orienté ou non pour lequel
R
chaque arête est attribué d’un certain poids λ : A → appelé valuation. Etant donné un
sous-graphe G 0 = (S0 , A0 ) (S0 ⊂ S et A0 ⊂ A) on définit le poids du graphe G 0
λ( G0 ) =
X
λ ( a ).
a∈ A0
Un graphe simple valué est donné par la matrice de poids W = (wi,j )(i,j)∈S2 tel que wi,j
est la valeur de l’arc allant de i à j.
On s’intéresse à différents problème d’optimisation qui consiste à chercher un sous
graphe avec une certaine propriété qui minimise ou maximise son poids.
— Approche globale : on choisit l’arête optimale de façon que l’are rajouté ne relie
pas des sommets déjà connectés. On utilisera cette approche dans l’algorithme de
Kurskal.
Terminaison Chaque fois que l’on passe dans la boucle on marque un sommet, l’algo-
rithme s’arête quand on a marqué tous les sommets. Comme il y a un nombre fini de
sommet l’algorithme termine.
Complexité On passe |S| fois dans la boucle, et chaque fois que l’on passe dans la boucle,
on teste au plus | A| arêtes. La complexité est donc O(| A||S|).
Cette complexité est obtenue avec une représentation des graphes naïve, comme une
simple liste d’adjacence et des recherches dans celle-ci. Cependant, la complexité de l’al-
gorithme dépend fortement de la manière dont est implémenté le choix de l’arête/sommet
à ajouter dans l’ensemble à chaque étape. Si l’on utilise un tas min binaire, la complexité
devient alors O(| A| log |S|). En utilisant un tas de Fibonacci, on peut encore descendre à
O(| A| + |S| log |S|).
Terminaison Chaque fois que l’on passe dans la boucle on prend une nouvelle arête.
Comme il y a un nombre fini d’arêtes l’algorithme termine.
Résultat sur lequel repose l’algorithme L’algorithme de Kruskal repose sur la proposi-
tion suivante :
Proposition VII.2
Parmi les arbres de recouvrement minimaux du graphe G = (S, A) pour lesquels
le sous-ensemble d’arêtes A0 est imposé, il en existe au moins un qui contient une des
plus petites arêtes de A \ A0 qui ne crée pas de cycle lorsqu’on l’ajoute à A0 .
Considérons un arbre de coût minimal T qui contient A0 et pas les arêtes refusées pré-
cédemment. Soit a une des arêtes refusées précédemment. Si on l’ajoute à T, on crée un
cycle. Comme a ne créait pas de cycle en l’ajoutant à A0 . Obligatoirement, une des arêtes
de ce cycle, adjacente à a, n’est pas dans A0 et a donc un coût strictement supérieur à a qui
était une des arêtes de coût minimal. Soit b l’une des arêtes adjacente à a et ajoutée à A0
après avoir refusé a. En ôtant b de T et en ajoutant a, on supprime le cycle et on garde la
connexité, ce qui nous fournit un arbre de coût strictement inférieur à l’arbre supposé de
coût minimal.
Complexité
On définit de la même manière un cycle absorbant dans un graphe non orienté. Le théo-
rème reste vrai en remplaçant chemin par chaîne.
Dans la suite, les graphes seront donc sans circuits absorbants.
Proposition VII.4
Tout sous-chemin d’un plus court chemin est un plus court chemin.
57 VII.2. Problème de plus court chemin
Proposition VII.5
S’il existe un plus court chemin entre deux sommets s et s0 , alors il existe un plus
court chemin élémentaire entre s et s0 .
Cette proposition implique que étant donné un sommet initial, les chemins optimaux
pour aller de ce sommet à tous les autres peut être représenté par un arbre enraciné.
k ← k + 1;
8 7
A 2 D -5 E
6 2 1
Itération sommets traités Dist( A) Dist( B) Dist(C ) Dist( D ) Dist( E) Pred( A) Pred( B) Pred(C ) Pred( D ) Pred( E)
Initialisation 0 +∞ +∞ +∞ +∞ ∅ ∅ ∅ ∅ ∅
1 A 0 8 6 2 +∞ ∅ A A A ∅
1 D 0 8 6 2 +∞ ∅ A D A ∅
1 C 0 8 6 2 7 ∅ A D A C
1 E 0 8 6 2 7 ∅ A D A C
1 B 0 8 3 2 7 ∅ A C A C
2 A, D 0 8 3 2 7 ∅ A C A C
2 C 0 8 3 2 4 ∅ A C A C
2 E, B 0 8 3 2 4 ∅ A C A C
3 A, D, C, E, B 0 8 3 2 4 ∅ A C A C
— quand Dist( x ) atteins la valeur d(s, x ), elle ne varie plus dans la suite de l’algo-
rithme.
Montrons par récurrence la propriété suivante : Pk : si un plus cout chemin élémentaire
comporte k arc alors après k passages dans la boucle Dist( x ) = d(s, x ).
— L’initialisation est claire car seul s peut être atteint avec 0 arcs.
— On suppose la que Pk est vrai et soit x un sommet tel que le plus court chemin
de s à x comporte au plus k + 1 arcs. Soit p un prédécesseur de x. Le plus court
chemin reliant s à p comporte donc k arcs. Après k passages dans la boucle on a
Dist( p) = d(s, p) d’après l’hypothèse de récurrence. Après le k-ième passage, on
compare Dist(s) et Dist( p) + W ( p, x ) = d(s, p) + W ( p, x ) = d(s, x ) et on affecte à
Dist(s) la valeur d(s, x ) si ce n’est pas le cas. Ceci prouve l’hypothèse de récurrence
au rang k + 1.
Si le graphe n’a pas de circuit, il est possible de renuméroter les sommets de façon à
ne jamais revenir en arrière. Pour cela on réalise d’abord un tri topologique :
k ← 1;
while k < n do
for x ∈ S dont tous les prédécesseurs sont numéroté do
r ( x ) ← k;
k ← k + 1;
8 7
A 2 D -5 E
6 2 1
8 7
A 2 D -5 E
6 2 1
C
Niveau Dist(A) Dist(B) Dist(C) Dist(D) Dist(E) Pred(A) Pred(B) Pred(C) Pred(D) Pred(E)
Initialisation 0 +∞ +∞ +∞ +∞ ∅ ∅ ∅ ∅ ∅
1 0 8 +∞ 2 +∞ ∅ A ∅ A ∅
2 0 8 3 2 ∞ ∅ A B A ∅
3 0 8 3 2 4 ∅ A B A C
4 3
1
A 1 D 1
6 1
— pour v ∈
/ D, Dist( x ) ≥ d(s, x ), et Dist( x ) est la longueur du plus court chemin
de u0 vers v dont tous les noeuds internes sont dans S.
Démonstration :
VII.2.6 Remarques
Le tableau ci-dessous récapitule les graphes sur lesquels chaque algorithme peut s’ap-
pliquer ainsi que leur complexité. On notera n le nombre de sommets et a le nombre d’arcs
du graphe. La complexité de l’algorithme de Dijkstra peut être améliorée en choisissant
une structure de données plus perfectionnée (file de Fibonacci).
8 7
A 2 D -5 E
6 2 1
Si on recherche l’ordonnancement au plus tôt, cela revient à chercher les chemins maxi-
maux. On décompose en niveau et on utilise Bellmon simplifié. Pour l’exemple on obtient :
A B C D E
Dist 0 8 2 6 15
Pred ∅ A A A B
63 VII.3. Flots dans les transports
Si l’on veut réaliser le projet en 17 jours au plus et que l’on cherche l’ordonnancement
au plus tard on inverse les arêtes et on applique Bellman pour rechercher les chemins les
plus longs (attention les niveaux peuvent changer).
8 7
A 2 D -5 E
6 2 1
A B C D E
Dist 15 7 1 3 0
Pred B E E C ∅
Ainsi la tâche A doit être faite dans [0, 2], la tâche B doit être faite dans [8, 10], la tâche
C doit être faite dans [2, 16], la tâche D doit être faite dans [6, 15] et la tâche E doit être faite
dans [15, 17].
[2] [2]
s [1] p
[1] [2]
Le problème qui nous intéresse est alors d’optimiser le parcours global du réseau en
tenant compte des contraintes données par les capacités limitées de chaque partie du ré-
seau.
Chapitre VII. P ROBLÈMES D ’ OPTIMISATION POUR DES GRAPHES VALUÉS 64
Définition VII.2. Soit un réseau de transport R = (S, A, s, p, c). Un flot sur R est une fonction
R
f : A → + telle que
— pour tout arcs a ∈ A, f ( a) ≤ c( a) ;
— pour tout s ∈ S et x ∈ S \ {s, p}, on a
X X
f (z, x ) = f ( x, y)
z∈Pred( x ) y∈Succ( x )
| {z } | {z }
flot entrant dans x flot sortant de x
1[2] 2[2]
s 1[1] p
1[1] 0[2]
X X C(X )
{s} { a, b, p} 3
{s, a} {b, p} 5
{s, b} { a, p} 3
{s, a, b} { p} 4
Il est clair qu’un flot ne pourra pas avoir une valeur supérieure à la capacité d’une
coupe. La recherche d’une coupe de capacité la plus petite possible nous permettra donc
de connaître les limites du réseau. La réciproque est vraie, on a le résultat suivant.
Théorème VII.7
Soit R = (S, A, s, p, c) un réseau de transport, il existe un flot maximal f tel que
v( f ) = min C ( X ).
coupe X
65 VII.3. Flots dans les transports