Académique Documents
Professionnel Documents
Culture Documents
GRAPHES
Dr Jean KOUDI
Chapitre Premier
Introduction et motivation
La théorie des graphes est aujourd’hui une discipline à part entière des mathé-
matiques disposant des moyens et les méthodes les plus puissantes pour une
modélisation facile des problèmes concrets de la vie.
L’histoire de la théorie des graphes débute peut-être avec les travaux d’Euler au
XV III e siècle et trouve son origine dans l’étude de certains problèmes, tels que
celui des ponts de Königsberg (voir plus loin)
La théorie des graphes s’est alors développée dans diverses disciplines telles que
la chimie, la biologie, les sciences sociales.
Quelques applications
Graphe non-orienté.
2.1 Définition.
Si e = {u, v}, on dit que u et v sont voisins et qu’ils sont adjacents, ou incidents
à e et que e est incidente à u et à v.
La paire associée à une arête peut également être la répétition d’un sommet,
auquel cas on parle de boucle (e = {v, v}).
Un sommet auquel aucune arête n’est incidente est dit isolé. Un sommet incident
à une seule arête est dit pendant et l’arête est une arête pendante.
Si plusieurs arêtes sont incidentes à la fois à deux sommets, on dit qu’elles sont
des arêtes parallèles ou arêtes multiples. On parle aussi de famille d’arêtes.
Si graphe non orienté contient au moins une boucle ou d’arêtes parallèles, on dit
qu’il est un multigraphe.
u1
1 2
u6 u8
f a e
u5 3
b u2
u7 u3
4
c
u4
d 5
Le graphe G1 = (V, E) avec V = {a, b, c, d, e, f } et E = {{a, c}, {a, d}, {a, e}, {b, c}, {c, d}, {d, e}, {e, c}
G1 contient 6 sommets et 7 arêtes donc l’ordre de G1 est 6. Le sommet b de G1
est un sommet pendant et le sommet f est un sommet isolé.
5 4
6
4 1 3
1 3
2 2
Une chaîne dans G, est une suite ayant pour éléments alternativement des som-
mets et des arêtes, commençant et se terminant par un sommet, et telle que
chaque arête est encadrée par ses extrémités. On dira que la chaîne relie le
premier sommet de la suite au dernier sommet.
Un cycle est une chaîne qui commence par un sommet et se termine par ce même
sommet. On dira que la chaîne relie le premier sommet de la suite à lui même.
v1
e1
v2 e3
e2 v5
e5
v3 e4
v4
Graphe G3
On dit qu’une chaîne est simple si elle utilise une et une seule fois chacune
de ses arêtes. De manière analogue, un cycle simple est un cycle utilisant
une et une seule fois chacune de ses arêtes. Dans le graphe G2, la chaîne
(1, u1 , 2, u8 , 3, u7 , 4) est une chaîne simple. Le cycle (1, u1 , 2, u2 , 4, u5 , 1)
est un cycle simple.
Une chaîne élémentaire est une chaîne qui utilise une et une seule fois chacun
de ses sommets. Pareil pour un cycle élémentaire. Dans le graphe G2, la
chaîne (1, u1 , 2, u8 , 3, u7 , 4) est une chaîne élémentaire. Le cycle (1, u1 , 2,
u2 , 4, u5 , 1) est un cycle élémentaire.
2.2.1 Sous-graphe.
Une clique (clique) d’un graphe G = (V, E) est un sous-graphe induit complet.
2.2.3 Couplages
Un couplage est dit maximal s’il contient un nombre maximal d’arêtes deux à
deux non adjacentes.
2.2.4 Modélisation
Exercice 2.1. . On a six wagons à trier. Dans la gare de triage, les wagons entrent dans
l’ordre 2, 5, 3, 6, 1, 4 et doivent sortir dans l’ordre croissant. Deux wagons i et j peuvent
être mis sur la même voie si et seulement s’ils entrent dans l’ordre dans lequel ils doivent
sortir.
Dans un graphe simple, on peut aussi définir le degré d’un sommet comme étant
le nombre de ses voisins (la taille de son voisinage). Dans le multigraphe ci-contre,
on a les degrés :
X
Si G = (V, E), on a : d(v) = 2|E|
v∈V
Le degré d’un graphe est le degré maximum de tous ses sommets. Dans l’exemple
ci-dessous, le degré du graphe est 4, à cause du sommet v3 .
Si on peut dessiner un graphe G dans le plan sans qu’aucune arête n’en coupe
une autre, on dit que G est planaire. Le graphe G ci-dessous est planaire.
Un graphe est connexe s’il est possible, à partir de n’importe quel sommet, de
rejoindre tous les autres en suivant les arêtes. Un graphe non connexe se dé-
compose en composantes connexes. Une composante connexe est un sous graphe
induit maximal et connexe.
5
6
4
1 3
2
5
6
4
1 3
2
Graphe connexe
Une forêt est un graphe sans cycle ni boucle. Chaque composante connexe d’une
forêt est un arbre.
6 5 7 6 5 7
3 9 3
8 8
1 2 4 1 2 4
Arbre. Forêt.
Proposition 2.8. Soit G = (V, E) une forêt d’ordre n et possédant p composantes connexes.
alors |E| = n − p.
Définition 2.9. (Arbre couvrant.) Un arbre couvrant d’un graphe G = (V, E) est un graphe
partiel de G et qui est un arbre.
6 5 7 6 5 7
3 3
8 8
1 2 4 1 2 4
On appelle cycle eulérien d’un graphe G un cycle passant une et une seule fois
par chacune des arêtes de G. Un graphe est dit eulérien s’il possède un cycle
eulérien. On appelle chaîne eulérienne d’un graphe G une chaîne passant une
et une seule fois par chacune des arêtes de G. Un graphe ne possédant que
des chaînes eulériennes est semi-eulérien. Plus simplement, on peut dire qu’un
graphe est eulérien (ou semi-eulérien) s’il est possible de dessiner le graphe sans
lever le crayon et sans passer deux fois sur la même arête.
NB : On convient que tout graphe constitué que des sommets isolés est eulérien.
Conséquence 2.12. Soit G = (V, E) un multigraphe non connexe contenant une seule
composante connexe non réduit à un sommet isolé. Si tout sommet de G est de degré pair
alors G est eulérien.
Exercice 2.14. .
Les graphes suivants sont-ils eulériens (ou semi-eulériens) ?
Exercice 2.15. Cet exercice est un des problèmes fondateurs de la théorie des
graphes, proposé par le mathématicien suisse Leonhard Euler en 1736. En 1652,
la ville de Königsberg (aujourd’hui Kaliningrad) possède sept ponts enjambant
la Pregel, qui coule de part et d’autre de l’île de Kneiphof.
Au cours d’une promenade, est-il possible de passer sur tous les ponts de la ville
une et une seule fois et revenir au point de départ ?
Exercice 2.16. .
Est-il possible de tracer une courbe, sans lever le crayon, qui coupe chacun des 16 segments
de la figure suivante exactement une fois ?
Il existe plusieurs moyens de représenter des graphes. Parmi ceux-ci, nous avons
la matrice d’adjacence, la matrice d’incidence et des listes d’adjacences.
Dans une matrice d’adjacences, les lignes et les colonnes représentent les som-
mets du graphe.
2. Il n’y a que des zéros sur la diagonale allant du coin supérieur gauche au
coin inférieur droit. Un « 1 » sur la diagonale indiquerait une boucle.
3. Elle est symétrique : mij = mji . On peut dire que la diagonale est un axe
de symétrie.
4. Une fois que l’on fixe l’ordre des sommets, il existe une matrice d’adja-
cences unique pour chaque graphe. Celle-ci n’est la matrice d’adjacences
d’aucun autre graphe.
1 si vi est incident à l’arête ej
aij = 2 si vi est incident à l’arête ej et ej est une boucle
0 si vi n’est pas incident à l’arête ej
6 e7
5
e3
4 e6
e2
e5 e4 3
e1
1
Etant donné un graphe G = (V, E), on associe à chaque arête e un nombre p(e) ∈ R
appelé poids de l’arête. On dit que G est valué ou pondéré par les valeurs p(e).
Si e = {i, j}, on utilisera également la notation pij pour désigner le poids de l’arête
e.
6 6
5
5
4 3 10
-1 3
2
−4
1
Graphe valué.
La valeur d’une chaîne dans un graphe valué est égale à la somme des valeurs
des arêtes de la chaîne.
Définition 2.19. Un arbre couvrant à coût minimal est un arbre couvrant dont la valeur
est minimale.
2.7 Applications
On considère un graphe G(V, E) connexe et valué (ou pondéré) par une fonction
w définie de E vers R qui à chaque arête e de E associe associe son poids w(e).
Algorithme de Kruskal.
L’algorithme de Kruskal utilise une des définitions d’un arbre, le fait qu’il pos-
sède n − 1 arêtes et soit sans cycle. L’idée est de considérer les arêtes par poids
croissant (ordre indifférent en cas d’égalité). L’arête est ajoutée dans l’arbre si
elle ne crée pas de cycle. Lorsque n − 1 arêtes ont été ajoutées, l’algorithme s’ar-
rête et l’arbre couvrant obtenu est de poids minimum. Sa complexité temporelle
est en O(mlog(m)) lorsqu’on utilise les bonnes structures de données.
ALGORITHME DE KRUSKAL
Renuméroter les arêtes de telle façon que w(ei ) ≤ w(ej ) pour i < j
T = {}, P = 0 et i = 1
SINON
(i) T = T {ei }
S
(ii) P = P + w(ei ).
i=i+1
RETOURNER T et P ;
Exercice 2.20. Déterminer pour le graphe suivant, un arbre couvrant à coût minimal.
f
6 e
9
12
10 c
7
4
2
a
1 3
5
b
8
11
13
Algorithme de Prim.
L’algorithme de Prim utilise lui une autre définition d’un arbre, le fait qu’il pos-
sède n − 1 arêtes et qu’il soit connexe. L’idée est de construire progressivement
l’arbre à partir d’un sommet. Le sommet de départ, disons a, doit être connecté
aux autres sommets. Le sommet a est placé dans un ensemble W . On regarde le
cocycle S défini par W et on choisit l’arête de plus petit poids (aléatoirement en
cas d’égalité) que l’on met dans T , l’arbre en construction. Le nouveau sommet
incident à cette arête est ajouté à W et l’algorithme continue ainsi. Il s’arrête
après n − 1 itérations, donnant l’arbre couvrant de poids minimum T . Sa com-
plexité temporelle dépend de la structure de données utilisée pour mémoriser
l’arbre en construction. Elle peut être en O(mn) si l’on utilise des tableaux ou
des listes, O(mlog(n)) avec un tas min binaire ou O(m + nlog(n)) avec un tas de
Fibonacci. La complexité en O(mn) est la plus facile à comprendre. La boucle
principale construit l’arbre (O(n)), et dans cette boucle, on construit l’ensemble S
des arêtes du cocycle et on sélectionne celle de poids faible (O(m)). La complexité
est donc bien en O(mn).
ALGORITHME DE PRIM.
Instructions :
T = φ, p = 0, W = {a} ;
S = ω(W ) ;
Afficher (S − {e}) ;
RETOURNER T et P .
Si nous reprenons l’énigme sur les produits dangereux, nous pouvons constater
que le problème peut être formulé comme ceci : “Trouver le nombre minimum de
couleurs qui pemet de donner une couleur à chaque sommet du graphe, de façon
à ce que deux sommets adjacents soient de couleurs différentes”. Une couleur
représentera alors un stable, et donc un chargement possible pour un camion.
De nombreux autres problèmes peuvent se modéliser ainsi, et il est donc intéres-
sant de voir si des algorithmes efficaces permettent de trouver cette coloration
minimum. On parlera dans la suite de coloration de graphe (graph coloring)
Pour tout graphe simple G, nous pouvons définir son nombre chromatique. Si le
graphe a des arêtes multiples, on peut ne garder qu’une seule arête sans changer
le problème. En revanche, l’existence d’une boucle pose problème car le sommet
est voisin (neighbour) (adjacent) de lui même, et la coloration de ce sommet
n’est donc pas possible.
k ≤ χ(G) (2.1)
Le problème de coloration le plus célèbre est sans doute celui posé par Francis
Guthrie. Cherchant à colorier la carte des comtés d’Angleterre, il constate que
quatre couleurs suffisaient. Il a alors conjecturé que pour toutes subdivisions de
cartes géographiques, il était possible de les colorier avec quatre couleurs sans
Graphe orienté
Exemple 3.2.
Exemple 3.6.
Réaliser le graphe dont le dictionnaire Réaliser le graphe dont le dictionnaire
des précédents est le suivant : des suivants est le suivant :
Sommets Précédents
A -
Sommets suivants
B -
A E
C -
B B, C
D A
C D, E, F
E B
D C, F
F B
E -
G B
F C, D
H C, F
I D, E
n tel que
1 si (xi , xj ) ∈ E
aij = (3.1)
0 si (xi , xj ) < E
Matrice d’incidence
1 si xi est l’extrémité initiale deej
bij = −1 si xi est l’extrémité finale deej et ej n’est pas boucle (3.2)
0 dans les autres cas
Exemple 3.11. Un ingénieur informaticien doit exécuter cinq tâches avec cinq machines
différentes. Les diverses machines sont plus ou moins adaptées pour exécuter telle ou telle
tâches. Le tableau suivant présente les possibilités.
On appelle distance entre deux sommets d’un digraphe la longueur du plus pe-
tit chemin les reliant. S’il n’existe pas de chemin entre les sommets x et y, on
pose d(x, y) = ∞. Par exemple, sur le digraphe ci-dessous, d(v5 , v4 ) = 2, d(v4 , v5 ) =
∞, d(v3 , v1 ) = 1,
Un circuit est un chemin dont les sommets de départ et de fin sont les mêmes.
Le digraphe ci-dessous contient un circuit : (1, 6, 4, 1)
A
15
B E
D
H C
10
A
15
20 E
5 20
35 15 25
S B D T
5 20
10
5
F
C
10
Dans ce graphe, la valeur de (S,A) est 20. Celle de (A,E) est 10 et ainsi de suite.
La valeur d’un chemin ou d’un cycle dans un graphe valué est la somme des
valeurs des arc qui le constituent.
0 Si i = j
Cij = ∞ Si i , j et (i, j) < E (3.3)
δij Si i , j et (i, j) ∈ E
Présentation de l’algorithme
— Initialisations
— λ(j) = cij et P(j) = NUL pour 1 ≤ j ≤ n
— pour 2 ≤ j ≤ n fair :
Si cij < ∞ p(j) = 1
— S= 1 et T = 2 ; · · · ; n
— Itérations
— Tant que T n’est pas vide, faire :
— Choisir i dans T tel que λ(i) soit le minimum.
— Retirer i de T et l’ajouter à S.
— Pour chaque successeur j de i avec j ∈ T , faire :
— Si λ(j) > λ(i) + δ(i, j) alors
λ(j) = λ(i) + δ(i, j)
P(j) = i
15
3 B
7 C
2 3
4
A E 5
D
10
1. Initialisation :
2. Itération 1 :
3. Itération 2
4. Itération 3
5. Itération 4
(b) On a S = {1; 5; 4; 3; 2} et T = {}
Nous sommes à la fin de l’algorithme. On na donc l’arbre couvrant qui donne tous les plus
courts chemins allant de 1 aux autres sommets.
7 C
4
A E 5
3
D B
Exercice 3.15. Déterminer dans le graphe suivant, les plus courts chemins allant de a au
autres sommets.
2
e
2
1
3 c
1 b 1
3 1
a 4 d
2
5
Remarque 3.16. L’algorithme de Dijkstra ainsi présenté permet de déterminer le plus court
chemin dans tout graphe orienté comportant un circuit ou non. Pour des graphes orientés
sans circuit nous avons l’algorithme suivant.
Exemple 3.17. Considérons le graphe suivant défini par son dictionnaire des précédents :
Sommets Précédents
A -
B -
C B
D A, B
E C
F E
G D, E
H G, F
•Les sommets A et B n’ont pas de précédents, donc ils sont de niveau zéro (0). On les barre
dans la liste des précédents
•Les sommets C et D n’ont pas de précédents, donc ils sont de niveau un (1). On les barre
dans la liste des précédents
F E
G D,
@ E
H G, F
•Le sommet E n’a plus de précédent, donc il est de niveau deux (2). On le barre dans la liste
des précédents
G D, E
@ S
H G, F
•Les sommets F et G n’ont plus de précédents, donc ils sont de niveau trois (3). On les barre
dans la liste des précédents
•Le sommet H n’a plus de précédent, donc il est de niveau quatre (4). On le barre dans la
liste des précédents
A D G
H
B C E F
1. Initialisation :
i. λ(1) = 0
2. Itération
Pour améliorer le coût d’un sommet :
(a) On vérifie que tous les prédécesseurs du sommet sont marqués. Chaque
sommet est marqué par son coût minimal λ0 (i) associé et ainsi que le
précédent correspondant.
(b) Si tous les précédents du sommet i sont marqués, son coût λ(i) est
amélioré par la formule
λ0 (i) = min {λ(i), δ(j, i) + λ(j)} où δ(j, i) est le coût de l’arc (j, i).
j∈P re(i)
Exercice
% A B C D E F G H I J
A 7 6 9 6
B 10
C 4
D 9 5 9
E 5 10
F 4
G 9 5
H 9
I 9
J
Les techniques d’ordonnancement dans le cadre de la gestion d’un projet ont pour
objectif de répondre au mieux aux besoins exprimés par un client, au meilleur
coût et dans les meilleurs délais, en tenant compte des différentes contraintes.
L’ordonnancement se déroule en trois étapes :
La durée d’exécution d’une tâche est matérialisée par un trait au sein du dia-
gramme.
Les différentes étapes de réalisation d’un diagramme de Gantt son les suivantes :
ETAPE I : On détermine les différentes tâches (ou opérations) à réaliser et leur durée.
ETAPE II : on représente d’abord les tâches n’ ayant aucune antériorité, puis les tâches
dont les tâches antérieures ont déjà été représentées, et ainsi de suite · · ·
Sommets Précédents
A -
B A
C A
D C, B
E D
ii) Les durées d’exécution prévues des tâches sont représentées par un trait épais. (4
unités de temps pour C).
• D succède à B.
iv) Le déroulement d’exécution des tâches figure en pointillé, au fur et à mesure des
contrôles. On est à la fin de la 6 ème unité de temps, B est en avance d’une unité et
C’est en retard d’une unité.
v) On peut alors déterminer le chemin critique : qui est formé d’une succession de tâches,
sur le chemin le plus long en terme de durées. Il est appelé chemin critique car tout
retard pris sur l’une des tâches de ce chemin, entraîne du retard dans l’achèvement
du projet. ( Chemin critique : A, B, D, E)
ii) Permet d’identifier les marges existantes sur certaines tâches ( avec une
date de début au plus tôt et une date au plus tard).
iii) La date au plus tard de début d’une tâche, la date à ne pas dépasser sans
retarder l’ensemble du projet.
Tâches A B C D E F G H I J K L M
Exemple 3.20. Précédents - - A - B E C,D - H - I,J F,G K,L
Durées 1 2 1 3 2 5 2 5 2 1 4 5 4
Il s’agit de :
• Début au plus tôt d’exécution d’une tâche tX : C’est le maximum des fins au
plus tôt des tâches qui la déclenche (Il peut exceptionnellement y avoir un retard
ou chevauchement si le cahier des charges du projet le précise et que la faisabilité
est vérifiée). On a :
TX = max{tY + dY ; Y ∈ pred(X)}
• Début au plus tard d’une tâche t∗X : C’est la date de fin au plus tard de la tâche
moins la durée de la tâche. On a : t∗X = min{t∗Y − dX ; Y ∈ suiv(X)}
• Fin au plus tôt : C’est la date de début au plus tôt plus la durée de la tâche.
• Fin au plus tard : C’est le minimum des dates de début au plus tard des tâches
qu’elle enclenche.
• Marge totale Mt (X) : C’est le retard admissible du début d’une tâche qui
n’entraîne aucun recul de la date de fin du projet, mais qui consomme les marges
libres des opérations suivantes. C’est la date de début au plus tard moins la date
de début au plus tôt. On a :
Mt (X) = TX∗ − TX .
On dit que X est une tâche critique si la marge totale de X est égale à 0. On a :
Mt (X) = Ml (X).
Un chemin allant de Début à la Fin dont toutes ses tâches sont critiques est un
chemin critique.
• Marge libre Ml (X) : C’est le retard admissible sur une tâche qui n’entraîne pas
de modification des calendriers des tâches suivantes.
Exercice 3.21. .
Le projet d’installation d’un reseau de communication locale dans un service comporte plu-
sieurs tâches liées entre elles par des relations de succession présentées par le tableau suivant :
2. Déterminer les dâtes de début au plus tôt et les dâtes de début au plus tard de chaque
tâche.
5. Donner les conséquences d’un retard de 4 jours sur le démarrage des tâches B et D.
Exercice 3.22. .
On considère le projet suivant :
2. Déterminer les dâtes de début au plus tôt et les dâtes de début au plus tard de chaque
tâche.
La méthodes s'appuie en grande partie sur une représentation graphique qui permet de
bâtir un « réseau PERT ».
Étape : commencement ou fin d'une tâche. Une étape n'a pas de durée. On symbolise une
étape (ou « noeud ») sur le réseau par un cercle.
Tâche : déroulement dans le temps d'une opération. Contrairement à l'étape, la tâche est
pénalisante car elle demande toujours une certaine durée, des moyens (ou ressources) et
coûte de l'argent. Elle est symbolisée par un vecteur (ou arc orienté, ou liaison orientée) sur
lequel seront indiqués l'action à effectuer et le temps estimé de réalisation de cette tâche.
A (12)
Exemple de réseau :
A (12) B (6)
1 2 3
Tâches successives :
Exemple :
A (12) B (6) C (3)
1 2 3 4
D (4)
3 5
B (6)
A (12)
1 2
C (3)
4
D (4)
3 4
B (6)
A (12)
1 2 X (0)
C (3)
3'
Tâches convergentes : Plusieurs tâches peuvent se terminer sur une même étape.
Exemple :
1
A (12)
C (3)
3 4
B (6)
Ici, la tâche A (12) a une durée de 12 unités de temps, B(6) a une durée de 6 unités de
temps. On constate que la tâche A dure plus longtemps que B. A est dite
« pénalisante ».
Nous pouvons calculer la durée du projet (ici : 12+3 = 15 unités de temps) en prenant
le chemin le plus long dit « chemin critique ».
Ce « chemin critique » pourra être repéré en rouge. Les tâches de ce chemin seront à
surveiller prioritairement.
Exemple :
A (12)
1 4 2
A (12)
B (6) B (6) 3
2 5 1
C (3)
B (6) 6 4
3
NON OUI
Si le graphe se termine par plusieurs tâches (plusieurs étapes de sortie (ou de fin), il ne
doit y avoir qu'une seule étape de sortie.
Exemple :
T (2)
11 14 11 T (2)
U (4) U (4)
12 15 12 14
V (6)
V (6) 16
13 13
NON OUI
1 4
A (12)
B (6)
3
C (3)
D (4)
2 FAUX 5
Pour respecter les contraintes d'antériorités du projet, on introduit une tâche fictive
comme suit :
A (12) C (3)
1 3 4
X (0)
B (6) D (4)
2 3' 5
Les étapes ou « noeuds » peuvent être représentés de différentes façons selon les
informations que l'on souhaite mettre en évidence. Date de fin au
plus tôt de la
4 22 tâche précédente.
Étape : 4 ou ou 4 1 Battement ou
22 23 23 marge.
- Établir la liste des tâches (faire le partitionnement des tâches en fonction des ressources).
- Déterminer des antériorités : tâches immédiatement antérieures, et tâches antérieures.
- Déterminer les niveaux d'exécution ou rang des tâches (optionnel).
- Construire le réseau PERT.
− Calculer la durée du projet, les dates début et de fin des tâches. Déterminer le chemin
critique. Mettre en évidence les marges.
2.6. Application.
Soit les tâches suivantes qui constituent un projet : A (3), B (4), C (2), D (3), E (4).
Remarque
Etant donnée une tâche X définie par les étapes i et j ( i est l’étape initiale et j
est son étape finale ). On désigne par Ti la date au plus tôt de i et Ti∗ la date au
plus tard de i. Alors
— La marge totale de X est Mt (X) = Tj∗ − Ti − dX
— La marge libre de X est Mt (X) = Tj − Ti − dX