Vous êtes sur la page 1sur 76

1 - Notions Fondamentales de

la Théorie des Graphes


Université Alger 1, Dept Maths & Informatique

Dr. Fodil LAIB

Février 2017
Principe et Origines 2
La théorie des graphes visualise une
problématique par un graphe synoptique. b
Elle propose des algorithmes de résolution.
a c
Historique
d
b
1 Représentation de Königsberg par un graphe
2 3
a 7
c
6 5 Le théorème d’Euler affirme que ce problème
4 n’admet pas de solution.
d
Kirchhoff (1847) : analyse des circuits électriques
Les 7 ponts de Königsberg

Hamilton (1857) : Trouver un chemin passant une


Travaux d’Euler (1735) : Comment traverser les seule fois par les 18 villes du jeu icosien.
7 ponts de la ville de Königsberg (Russie) une
seule fois et revenir au point de départ ?
Définitions de Base 3
Un graphe G=(X,U) est composé de : Un arc u=(x, x) dont les deux extrémités
X : ensemble des sommets coïncident est une boucle. L’arc u=(b,b) est une
boucle.
U : ensemble des liens reliant les sommets.
Graphe non orienté : les liens sont des Ordre d’un graphe : c’est le nombre de
arêtes sommets du graphe, 𝑛 = 𝑋 .
b
Taille d’un graphe : c’est le nombre d’arcs du
a c graphe, 𝑚 = 𝑈 .
Graphe valué : tout arc (ou arête) porte une valeur
d numérique. Ces valeurs peuvent être des quantités
Graphe non orienté transportées, des débits, des coûts, etc.

20
Graphe orienté : les liens sont des arcs 3
15
e a b c e
7
b
9 17 1
d c

X = {a, b, c, d, e} Graphe Orienté 2 18


a d f
U={ (a,b), (b,b),(b,c), (c,a), (c,d), (d,a), (d,e),
(e,a), (e,c) } Graphe orienté et valué
Prédécesseurs et Successeurs 4
Soit x un sommet d’un graphe orienté : Degrè d’un sommet
𝑈 − 𝑥 = 𝑦 ∈ 𝑈, (𝑦, 𝑥) ∈ 𝑈 : ensemble des
𝑑− 𝑥 = 𝑈− 𝑥 : demi-degré intérieur de x
prédécesseurs de x
+
𝑈 𝑥 = 𝑦 ∈ 𝑈, (𝑥, 𝑦) ∈ 𝑈 : ensemble des
𝑑+ 𝑥 = 𝑈+ 𝑥 : demi-degré extérieur de x
successeurs de x 𝑑(𝑥) = 𝑑 − 𝑥 + 𝑑 + 𝑥 : degré de x
𝑈(𝑥) = 𝑈 − 𝑥 ∪ 𝑈 + 𝑥 : ensemble des voisins (ou Les boucles ne sont pas prises en compte.
sommets adjacents) de x
b
Eg.

d e 𝑑+ 𝑎 = 2
a
𝑑− 𝑎 = 1
⇒𝑑 𝑎 =2+1=3
c

𝑑+ 𝑒 = 1
Les successeurs de a sont 𝑈 + 𝑎 = 𝑐, 𝑑 ,
𝑑− 𝑒 = 3
Les prédécesseurs de e sont : 𝑈 − 𝑒 = 𝑏, 𝑐, 𝑑
⇒𝑑 𝑒 =1+3=4
Les voisins de a sont 𝑈 𝑎 = 𝑏, 𝑐, 𝑑
Modélisation par un Graphe 5
Exemple 1 (problème du passeur)
Rive Gauche Rive Droite
Un passeur (P) doit faire traverser une rivière à un
loup (L), une chèvre (V) et un chou (C) dans une P,L,V,C t0
petite barque à deux places.
Pour des raisons évidentes, on ne peut laisser seules L,C P,V t1
sur une rive le loup et la chèvre ou la chèvre et le
chou.
L, C,P V t2
Solution
Un sommet représente l’état d’une rive à un L V,P,C t3
instant donné.
Un arc représente le passage d’une rive d’un L,P,V C t4
état à un autre.
V C,P,L t5

V,P C,L t6

C,L,P,V t7
… 6
Exemple 2 (transvaser 3 récipients) t0
Soient 3 récipients A, B et C de capacités 8, 5 et
3 litres respectivement. Le récipient A est rempli 8/0/0
d’un liquide, les deux autres (B et C) sont vides. t7 t1
Comment utiliser les récipients B et C pour 4/4/0 3/5/0
répartir ce liquide en deux quantités égales de 4
litres ? Utiliser un graphe pour représenter la
solution de ce problème. t6 t2

Solution 1/4/3 3/2/3


Chaque sommet du graphe est un triplet
(q1,q2,q3) où qi représente l’état du récipient i
(i=A,B,C). t5 t3
A l’instant t0, A est plein, B et C sont vide, on a 1/5/2 6/2/0
donc le sommet (8/0/0) t4
A l’instant t1, on a versé 5 litres dans B, il reste 3
6/0/2
litres dans A, C est toujours vide, on a donc le
sommet (3/5/0).
A l’instant final t7, on aura 4 litres dans A, 4 litres
dans B et 0 litres dans C, d’où le sommet (4/4/0).
Les Chemins et les Circuits 7
Chemin : c’est une séquence d’arcs qui se Chaine : c’est une séquence d’arcs, tel que 2
suivent arcs consécutifs ont un sommet en commun ;
e a l’orientation des arcs n’a pas d’importance.

b b c e
d c
(c, d, e, a ) est un chemin
a d f
(b,a,d,c,e) est une chaine
Circuit : c’est un chemin fermé
Cycle : c’est une chaine fermée
e a

b b c e
d c
(e, c, d, e) est un circuit
a d f
(c,e,f,d) est un cycle
Graphe Heulerien et Hamiltonien 8
Un chemin simple (resp. un circuit) ne passe Deux arcs u1(x1,y1) et u2(x2,y2) sont parallèles
qu’une seule fois par chacun de ses arcs. si x1=x2 et y1=y2.
Un chemin élémentaire (resp. un circuit) ne
u1 a1
passe qu’une seule fois par chacun de ses b b
sommets.
a u2 a a2

Les arcs u1 et u2 Les arêtes a1 et


Un graphe eulérien possède un circuit simple de sont parallèles a2 sont parallèles
longueur 𝑚 = 𝑈 .
Un graphe simple n’a pas de boucle, et n’a
Un graphe hamiltonien possède un circuit pas d’arcs (resp. arêtes) parallèles.
élémentaire de longueur 𝑛 = 𝑋 .
u6 u1 u4
d b u2 b
u2 d a u2 u3 u5
a a a u6
u4 b c c
u6 e u5 u3
u1 u1 u4
b u7
u3 d d
c u5
c Graphe Simple Graphe Non Simple
(u1,u3,u5,u6,u4,u2) (u1,u4,u3,u6) circuit U1 est une boucle
circuit eulérien hamiltonien U4 et u5 sont parallèles
La Connexité 9
Soit 𝐺 = (𝑋, 𝑈) un graphe. Si ∀ 𝑥, 𝑦 ∈ 𝑋, il existe au Un graphe est fortement connexe si et
moins une chaine reliant 𝑥 à 𝑦, alors G est seulement si ∀ 𝑥, 𝑦 ∈ 𝑋, il existe un chemin les
connexe, sinon il est non connexe. reliant.
e a
b e
b
a
c d c
d Graphe fortement Connexe
Graphe connexe
Il existe une chaine entre tout couple de sommets

b
f e a
a d
b
c e
d c
Graphe non connexe
Par exemple, il y a pas de chaine entre b et f Graphe non fortement connexe
Par exemple, pas de chemin entre b et e
Ce graphe admet 2 composantes connexes
{a,b,c,d} et {e,f}
Représentation Informatique d’un Graphe 5 b 2
3
b a
7 c
4
a d 1
c
Cas de graphe valué
d
Liste des arcs : On ajoute une 3° ligne au tableau
Cas de graphe non valué pour contenir les valeurs des arcs

Liste des arcs : c’est un tableau à 2 lignes et 𝑚 = 𝑈 a a b c c c


colonnes qui contient tous les arcs 𝑢𝑖 ∈ 𝑈 b d c a b d
a a b c c c 5 4 3 7 2 1
b d c a b d
Matrice d’adjacence : Soit 𝑣𝑖𝑗 la valeur de l’arc (i,j):
Matrice d’adjacence : c’est une matrice carré
𝑣𝑖𝑗 si (𝑖, 𝑗) ∈ 𝑈
𝑀 = 𝑚𝑖𝑗 où 𝑚𝑖𝑗 =
∞ sinon
1 si (𝑖, 𝑗) ∈ 𝑈
𝑚𝑖𝑗 = Eg
0 sinon
∞ 5 ∞ 4
Eg. ∞ ∞ 3 ∞
0 1 0 1 𝑀=
7 2 ∞ 1
0 0 1 0
𝑀= ∞ ∞ ∞ ∞
1 1 0 1
0 0 0 0

Liste chainée : pour chaque sommet 𝑥 ∈ 𝑋, on lui
associe la liste de ses successeurs et la valeur de
chaque arc : b u5
u1 u3
a b 5 d 4
u4
a c
b c 3
u2 u6
c a 7 b 2 d 1
d
d
u7
Matrice d’incidence sommet-arc 𝑵 = 𝒏𝒊𝒋 :
Chaque ligne de la matrice représente un
sommet i u1 u2 u3 u4 u5 u6 u7
1 1 ∞ −1 ∞ ∞ ∞ a
Chaque colonne de la matrice représente un arc
𝑗 = (𝑥𝑗 , 𝑦𝑗 ) −1 ∞ 1 ∞ −1 ∞ ∞ b
𝑁=
1 si 𝑖 = 𝑥𝑗 ∞ ∞ −1 1 1 1 ∞ c
∞ −1 ∞ ∞ ∞ −1 0 d
−1 si 𝑖 = 𝑦𝑗
𝑛𝑖𝑗 =
0 si 𝑖 = 𝑥𝑗 = 𝑦𝑗 (cas d′une boucle)
∞ sinon
Types de Graphes 12
G est un graphe planaire si ses arcs ne se G=(X,U) est un graphe biparti si X est réparti en 2
croisent pas. sous-ensembles X1 et X2 disjoints et non vides, tel
a que tout arc de U a une extrimité dans X1 et
G1 b G2 b
l’autre dans X2 X1 X2
c e c e e
b
d d
a
a
c
Graphe non planaire G1 converti en d
graphe planaire G2
Graphe biparti
G est un graphe complet s’il y’a un arc entre
Soit G=(X,U) un graphe. Le graphe G’=(X’,U’) est
tout couple de sommets du graphe
le dual de G si pour toute arête 𝑢 ∈ 𝑈, il existe
une seule arête 𝑢′ ∈ 𝑈 tel que u’ croise u.
a
a
b
d X={a,b,c,d}
g e b
c
c X’={e,g}
d

Graphe complet Graphe G et son dual G’


… 13
Un arbre est un graphe où chaque sommet ne Un réseau est un graphe fortement connexe,
possède qu’un seul prédécesseur, sauf le sans boucles.
sommet racine qui n’a aucun prédécesseur.
Un réseau possède 2 sommets particuliers : sommet
Les sommets qui n’ont pas de successeurs sont entrée et sommet sortie, liés par un arc fictif
appelé les feuilles. a garantissant la forte connexité du graphe.

b c d b e g

c h j
e f g h i a

f i
j k d
Un Arbre Un Réseau
{a} est la racine, {e,f,g,j,k,i} sont les feuilles {a} : entrée du réseau, { j } : sortie du réseau

Une foret est un graphe non connexe, dont


chaque composante connexe est un arbre.

Une Foret
Applications des Graphes 14
L’arbre couvrant, eg. optimiser la connexion Problème de coloriage : utiliser un nombre
des quartiers d’une ville par la fibre optique minimum de couleurs
1
3 8 2
1 2
4 7 3
7
8 6
6 5 4
5
Passages de la fibre Coloriage d’une carte
Les rues d’une ville Modélisation
optique géographique
par un graphe
(arbre couvrant) Forte Connexité : placer des sens uniques dans
Plus court chemin : routage de paquets de une ville en garantissant un chemin entre tous ses
données transitant par un réseau (internet) quartiers :
b c b c
2 b 7
a a
a 7 6 j
1
4 6 c 5 3 d e d e
d 8 f
e f f
9 6 g g
Le plus court chemin entre a et j est (a,b,f,j) h h
Avant (rues a double sens) Après (rues à sens uniques)
… 15
Graphe planaire : conception de circuit Réseau (problème de flot maximum) :
électronique intégré, les liens entre les acheminer une quantité maximale entre A et B
composants ne doivent pas se croiser. en respectant les contraintes [min,max] du
réseau.
[0,4] [2,3]
[1,4] b d f [0,5]
a b a b
a [1,3]
[1,2] [3,6] h
[2,7] [8,10]
c e [7,10]
g
[2,8]
d c d c
Conception erronée Conception correcte Ordonnancement des tâches : Chemin critique
(1) fondations Sommet : fin d’une tâche
Graphe biparti : affectations des taches T1…Tm à (2) gros œuvres Valeur d’un arc : durée
des processus P1…Pk (3) électricité d’une tâche
(4) chauffage central
(5) peinture extérieur 7
P1 P3 2
P2 (6) peinture intérieur 40
5 5
10
40 45
0 1 3 6
T1 T2 T3 T4 3
50
4
2 – Les Arbres et Arborescence en
Théorie des Graphes
Université Alger 1, Dept Maths & Informatique

Dr. Fodil LAIB

1
Février 2017
Un Arbre 2
Les arbres sont des graphes particuliers, très On appelle feuille d’un arbre un sommet
utilisés en algorithmique et en informatique. adjacent à une seule arête.
Soit G=(X,U) un graphe d’ordre 𝑛 = 𝑋 et de Une forêt est un graphe, dont chaque
taille 𝑚 = 𝑈 . composant connexe est un arbre. Autrement dit
une forêt est un graphe acyclique.
G est arbre s’il est connexe et acyclique (c.-à-d.
sans cycle). Sur ordinateur, une forêt peut être représentée à
l’aide de 2 tableaux :
Un arbre vérifie les propriétés suivantes :
NA : nombre d’arêtes de chaque arbre de la forêt
1. Le nombre d’arcs 𝑚 = 𝑛 − 1
AR : les arêtes des arbres
2. Si on supprime un arc, le graphe G sera
Exemple : Soit la foret suivante :
déconnecté ( ne sera plus connexe).
a d
On peut la
3. Si on ajoute un arc, G devient cyclique. h
sauvegarder sur
ordinateur sous e g
G1 G2 G3 G4 b c
forme de : i
f

NA 2 3 1
Exemples d’arbres
a a e e e h
AR
b c d f g I
Arbre Couvrant 3
Lorsque on élimine quelques arêtes d’un graphe Soit G=(X,U,W) un graphe valué où W={w1,…wm}
G, on obtient un graphe partiel de G. sont les poids des arêtes.
7 d
Lorsque on élimine quelques sommets de G et a 2 3
8
les arêtes associées, on obtient un sous graphe 4
8 c 6
de G. 9 e
b
a d a d d 4 f 5
Graphe Valué
b e b e b 7
a d a d
2 3
c c c 8
f f f c 4 c 6
6
Graphe Initial Graphe Partiel Sous Graphe 9 e e
b b
f 5 4 f
Un arbre T=(XT,UT) est un arbre couvrant du Arbre couvrant Arbre couvrant
graphe G=(X,U) si T est un graphe partiel de G c- de poids w=30 de poids w=24
à-d 𝑋𝑇 = 𝑋 et 𝑈𝑇 ⊂ 𝑈
Un arbre couvrant de poids minimum n’est pas
a d a d forcement unique.
b e b e Un arbre couvrant de poids min est unique si
pour chaque sommet du graphe G, ses arêtes
c c ont des poids distincts.
f f
Graphe G Arbre Couvrant de G
Une Arborescence 4
Dans le cas d’un graphe orienté, si un arbre Une arborescence k-aire est un arbre orienté
possède un seul sommet sans dont chaque sommet a au plus k successeurs :
prédécesseurs, ce sommet est appelé ses fils.
racine, et l’arbre est dit enraciné, ou bien Quand k=2, l’arbre est binaire.
une arborescence.
Niveau 0 a

a
Niveau 1 b c

b c d
Niveau 2 d e f g
e f g h i j k l
Niveau 3 h i j k l

Une chaine reliant la racine d’un arbre à Dans une arborescence, un niveau est un
une feuille est appelé une branche. ensemble de nœuds qui sont équidistants de la
racine. La racine se trouve au niveau 0.
Dans une arborescence, il existe un chemin
La hauteur (ou profondeur) d’un arbre est le
unique de la racine vers tous les autres nombre d’arcs sur un chemin de longueur
sommets. maximale.
… 5
Représentation Informatique des Arbres : Quelques Applications des Arbres Couvrants :
Sur ordinateur, un arbre peut être représenté Connecter économiquement un ensemble de
de différentes manières selon le contexte : stations : terminaux, téléphones, usines, etc.

Représentation générale d’un graphe Produire un graphe partiel permettant


d’analyser rapidement le grand graphe original
(matrice d’adjacence, liste d’arcs, etc.)
Conception des algorithmes de routage
Représentation récursive des arbres
binaires: Trouver des solutions rapides à des problèmes
complexes tels que le traveling salesmen et
1. Un arbre est un pointeur sur un sommet Steiner tree.
2. Un sommet est une valeur et 2 pointeurs :
Conception de réseaux
1. Un sur l’arbre fils de gauche
2. Un sur l’arbre fils de droite
Théorème de Cayley (1889) : Dans un graphe
1. Représentation récursive des arbres k-aires:
complet à 𝑛 sommets, il existe 𝑛𝑛−2 arbres
1. Un arbre est un pointeur sur un sommet couvrants.
2. Un sommet a une valeur et 2 pointeurs :
1. Un sur l’alrbre appelé premier fils
2. Un sur la liste des freres
Algorithme de Kruskal (1956) 6
L’algorithme de Kruskal retrouve l’arbre, où la foret Exemple 1 : Retrouver l’arbre de poids min de ce
d’arbres, de poids minimum dans un graphe graphe à l’aide de l’algorithme de Kruskal :
G=(X,U) valué. a 7
c
11
Procedure Kruskal (Arbre couvrant de poids minimum) 5
b 10
Input : G = (X,U,W) // le graphe 4 9
Output : A // l’arbre couvrant e
15
d 12 8
• Ordonner la liste des arêtes dans l’ordre croissant, Solution
soit L la liste obtenue : L={u1,u2,…,um}
6 f 13
g
• Poser A = ∅, k = 1 a d 4 Pas de circuit
Tant que 𝐴 < 𝑋 et 𝑘 ≤ 𝑚 faire
Si {A,uk} ne forme pas de cycle alors
c e 5 Pas de circuit a 7 11
c
ajouter uk à A d f 6 Pas de circuit 5
b 10
Fin Si a b 7 Pas de circuit 4 9
K = k +1 e
15
Fin tant que e g 8 Pas de circuit d 12 8
b d 9Circuit
Procédure : Tester si l’ajout de l’arc u à l’arbre T forme
6 f 13
g
b e 10 Pas de circuit
un circuit
• Introduire l’arbre T=(XT,UT) et l’arc u=(xu,yu) b c 11 Nombre
L’arbre couvrant de poids
Si 𝑥𝑢 , 𝑦𝑢 ∈ 𝑋𝑇 alors e f 12 d’arêtes = 6, minimal est A={ab, ad,
l’ajout de u à T formera un circuit soit |X|-1,
Sinon f g 13 donc on arête be, ce, df, eg}, son poids
l’ajout de u à T ne formera pas de circuit. d e 15 ici. est w=40.
… 7
Exemple 2 : Trouver l’arbre de poids min
4 4 b d 2 Pas de circuit L’arbre couvrant de
a e f
poids minimal est
3 5 3 3 g h 2 Pas de circuit
3 4 A={bd, gh, ab, bc,
2
a b 3 Pas de circuit df, fi, ae, cg},
b d g 8 i a d 3 Circuit son poids est
3 4 2 5
4 w=2+2+3+3+3+3+4+4
b c 3 Pas de circuit
5 =24.
c h d f 3 Pas de circuit
Solution f i 3 Pas de circuit
a e 4 Pas de circuit
4 4
a e f c d 4 Circuit
3 5 3 3
3 4 c g 4 Pas de circuit
2 8 e f 4 Nombre
b d g i
4 2 5 f g 4 d’arêtes = 8,
3 4 soit |X|-1,
5 c h 5 donc on arête
c h
d e 5 ici.
h i 5
f h 8
Algorithme de Boruvka (1926) 8
Appelé aussi algorithme de Sollin Exemple a c
7 11
5
Cet algorithme permet de retrouver un arbre b 10
couvrant de poids minimal. 4 9
e
15
Principe : Commencer par une forêt dont chaque d 12 8
composante est un sommet du graphe. Lier les
composantes par des arêtes de poids minimums
6 f 13
g
Initialisation : F = {a, b, c, d, e, f, g}
jusqu’à ce que la forêt se transforme en arbre
couvrant de poids minimum. Itération 1: |F| = 7 > 1

Procedure Boruvka (Arbre couvrant de poids minimum)


Input : G = (X,U,W) // le graphe a 7
c
11
Output : F // la foret (arbre) couvrante 5
b 10
4 9
• Poser F = X e
Tant que |F| > 1 faire 15
d 12 8
• L=∅
Pour tout composant C∈F faire 6 f g
13
• Trouver une arête up∈U de poids minimum L={ab, ab, ce, df, eg} .
liant C vers une autre composante C’∈F
• Ajouter up à L. Ajoutons L à F, on obtient
Fin Pour tout F = { {ad, ab, df}, {ce, eg} }
• Ajouter L à F
Fin tant que
… 9
Itération 2 : |F|= 2 > 1 Example 2 : Retrouver l’arbre de poids minimum à
l’aide de l’agorithme de Boruvka
a c 2 1 9
7 11 a d g j
5 6 4 5 6
b 1 3 1
10
4 9 9 2 7
e b e h k
15
d 12 8 5 3 5
8 4 3
6
6 f 13
g c f i l
2 9 1
L = {be}. Initialisation : F = { a, b, c, d, e, f, g, h, i, j, k, l }
Ajoutons L à F, on obtient Itération 1 : |F| = 12 > 1
F = { {ad, ab, df,ce, eg, be} }
2 1 9
a d g j
1 6 4 5 3 6 1
Itération 3 : |F| = 1. Fin 9 2 7
b e h k
F est un arbre couvrant de poids minimum. 8
5 3 5 4 3
6
Son poids est = 7+4+10+5+6+8 = 40.
c 2 f 9 i 1 l
L = {ab, cf, dg, eh, il, jk}.
Ajoutons L à F, on obtient
Itération 2: |F| = 6 > 1 Itération 4 : |F| = 1 ==> arbre de poids
2 1 9
10
a d g j minimum
1 6 4 5 3 6 1 2 1 9
9 2 7 a d g j
b e h k 6 4 5 6 1
1 3
3 8 4 9 2 7
5 5 3
6 b e h k
c f i l 3 8 4
2 9 1 5 5 6 3
L = {ad, bf, gh, kl}.
c 2 f 9 i 1 l
Ajoutons L à F, on obtient
F = { {ab, ad, bf, cf, dg, gh, eh}, { jk, kl, il} }
Itération 3 : |F| = 2
Poids min = (2+1+2+2+1)+(1+3+1+3)+(3+4)
2 1 9
a d g j =8+8+7 =23
1 6 4 5 3 6 1
9 2 7
b e h k
3 8 4
5 5 6 3

c 2 f 9 i 1 l
L = {hl}.
Ajoutons L à F, on obtient :
F={{ab, ad, bf, cf, dg, gh, eh, hl, jk, kl, il} }
La Complexité d’un Algorithme Exponentielle
11
Complexité temporelle : c’est le nombre O(n)
d’instructions nécessaires à l’exécution d’un
algorithme. On note c(n)
Complexité spatiale : c’est l'espace mémoire
nécessaire au stockage des données de
l'algorithme.
Exemple : Rechercher le minimum d’un tableau de
𝑛 entiers.
Dans le pire des cas, il faut 𝑛 affectations et 𝑛 −
1 tests, soit c 𝑛 = 𝑛 + 𝑛 − 1 = 2𝑛 − 1.
Cet algorithme est de complexité linéaire, on Exemple : Considérons un PC pour lequel durée
note cette complexité par O(n). exécution d’une instruction élémentaire = 0,001 s
Quelques classes de Complexités : Complexité de Temps D’Exécution sur Machine
c(n) Notation Complexité l’Algorithme n =10 n = 1000
𝑐 𝑛 =𝑐 O(1) Constante log 𝑛 0,001s 0,003 s
𝑛 0,003 s 0,032 s
𝑐 𝑛 = 2𝑛 + 1 O(n) Linéaire
𝑛 0,01s 1s
𝑐 𝑛 = log 𝑛 O(log n) Logarithmique n² 0,1s 17 min
𝑐 𝑛 = 𝑛3 + 2𝑛 + 4 O(n3) Polynomiale 𝑛3 1s 12 jours
𝑐 𝑛 = 𝑎𝑛 + 3𝑛2 − 5 O(an) Exponentielle 𝑛4 10 s 32 ans
2𝑛 1,024 s 3,4 *10287 millénaires
… 12
Complexité de l’algorithme Kruskal : Complexité de l’algorithme Bovurka :

Le tri des arêtes est la partie qui consomme La boucle externe de l’algorithme prend O(log
le plus de temps dans cet algorithme. n) itérations,
En incluant la boucle interne , l’algorithme prend
Avec un algorithme de tri rapide, le tri des
O(m log n).
arêtes peut se faire en m log m opérations
pour les m arêtes du graphe.
Donc, la complexité de l’algorithme de
Kruskal est O(m log m).
Algorithme de Prim (1957) 13
Procédure Prim (Arbre couvrant de poids minimum) Exemple : Utiliser l’algorithme de Prim pour retrouver
un arbre couvrant de poids minimum du graphe
Input : G=(X,U,W) // le graphe valué suivant : 8 7
b d g
Output : A // l’arbre couvrant
9
4 2
On pose 𝐴 = ∅ , 𝑆 = 𝑥1 // 𝑥1 premier sommet de X 11 4
a e i
Tant que 𝑆 < 𝑋 faire
7 6
• Sélectionner l’arête 𝑢 = 𝑥, 𝑦 ∈ 𝑈 de poids 8 10
minimum telle que 𝑥 ∈ 𝑆 et 𝑦 ∈ 𝑋/𝑆
c 1
f 2
h
• 𝑆=𝑆∪ 𝑦 Solution
• 𝐴=𝐴∪ 𝑢
Fin tant que Initialisation : 𝐴 = ∅ , 𝑆 = 𝑎
Itération 1 : 𝑆 = 1 < 9 = 𝑋
8 7
b d g
Compléxité : O(|X|²)
9
4 2
Mais on peut améliorer cette complexité avec certaines
techniques algorithmiques. 11 4
a e i
7 6
𝑢 = 𝑎, 𝑏 8 10
𝑆 = 𝑆 ∪ 𝑏 = 𝑎, 𝑏 c f h
1 2
𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏
… 14
Itération 2 : 𝑆 = 2 < 9 Itération 4 : 𝑆 = 4 < 9
8 7 8 7
b d g b d g
9 9
4 2 4 2
11 4 11 4
a e i a e i
7 6 7 6
8 8 10
𝑢 = 𝑎, 𝑐 10
𝑆 = 𝑆 ∪ 𝑐 = 𝑎, 𝑏, 𝑐 c f 2
h c 1
f 2
h
1
𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏, 𝑎𝑐 𝑢 = 𝑓, ℎ
𝑆 = 𝑆 ∪ 𝑐 = 𝑎, 𝑏, 𝑐, 𝑓, ℎ
Itération 3 : 𝑆 = 3 < 9 𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏, 𝑎𝑐, 𝑐𝑓, 𝑓ℎ
8 7
b d g Itération 5 : 𝑆 = 5 < 9 8 7
9 b d g
4 2
9
4 2
11 4
a e i 11 4
7 6 a e i
8 10 7 6
8
c f 2
h 10
𝑢 = 𝑐, 𝑓 1
c f h
𝑆 = 𝑆 ∪ 𝑐 = 𝑎, 𝑏, 𝑐, 𝑓 𝑢 = ℎ, 𝑑 1 2

𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏, 𝑎𝑐, 𝑐𝑓 𝑆 = 𝑆 ∪ 𝑐 = 𝑎, 𝑏, 𝑐, 𝑓, ℎ, 𝑑
𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏, 𝑎𝑐, 𝑐𝑓, 𝑓ℎ, 𝑑ℎ
… 15
Itération 6 : 𝑆 = 6 < 9 Itération 8 : 𝑆 = 8 < 9 8 7
b
8 7 b d g
d g
9
9 4 2
4 2
11 4
11 4 e i
a e i a
7 6
7 6 8
8 10
10
c f h 𝑢 = 𝑔, 𝑖 c 1
f 2
h
1 2
𝑢 = 𝑑, 𝑒 𝑆 = 𝑆 ∪ 𝑐 = 𝑎, 𝑏, 𝑐, 𝑓, ℎ, 𝑑, 𝑒, 𝑔, 𝑖
𝑆 = 𝑆 ∪ 𝑐 = 𝑎, 𝑏, 𝑐, 𝑓, ℎ, 𝑑, 𝑒 𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏, 𝑎𝑐, 𝑐𝑓, 𝑓ℎ, 𝑑ℎ, 𝑑𝑒, 𝑑𝑔, 𝑔𝑖
𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏, 𝑎𝑐, 𝑐𝑓, 𝑓ℎ, 𝑑ℎ, 𝑑𝑒 Itération 9 : 𝑆 = 9 ≮ 9 ⇒ 𝑓𝑖𝑛
Itération 7 : 𝑆 = 7 < 9 b d
7
g
8 7
b d g 9
4 2
9
4 2 4
11 4 a e i
a e i
8
7 6
8 10 c 1
f 2
h
𝑢 = 𝑑, 𝑔 c 1
f 2
h Le poids de cet arbre couvrant est
𝑆 = 𝑆 ∪ 𝑐 = 𝑎, 𝑏, 𝑐, 𝑓, ℎ, 𝑑, 𝑒, 𝑔
w = 4 + 8 + 1 + 2 + 4 + 2 + 7 + 9 = 37
𝐴 = 𝐴 ∪ 𝑢 = 𝑎𝑏, 𝑎𝑐, 𝑐𝑓, 𝑓ℎ, 𝑑ℎ, 𝑑𝑒, 𝑑𝑔
Code C pour l’algorithme de Prim 16
#include <stdio.h> int charger_fichier_donnees()
#include <stdlib.h> { FILE *f;
char nom_fichier[80];
#define Max 20 int i,j;
#define Inf 99999 printf("\n\nAlgorithme de PRIM (arbre couvrant de poids
minimum)");
double G[Max][Max], poids; printf("\n*********************************************
int A[Max][2], S[Max], T[Max]; ********");
int n_G, n_A, n_S, n_T; printf("\n\n\tFichier de donnees : ");
int a_min, b_min, indice; scanf("%s",nom_fichier);
if ( ( f=fopen(nom_fichier, "r") ) == NULL)
{ printf("\n\n\tFichier de donnees incorrect.");
int charger_fichier_donnees(); return 0;
void afficher_matrice_adjacence(); }
void initialiser_variables(); else
int detecte_arete_minimale(); { fscanf(f,"%d",&n_G);
int prim(); for(i=1; i<=n_G; i++)
void afficher_arbre_couvrant(); for(j=1; j<=n_G; j++) fscanf(f, "%d",
&G[i][j]);
}
return 1;
}

void afficher_matrice_adjacence()
{ int i,j;
int main() printf("\n\n\tNombre de sommets = %d",n_G);
{ printf("\n\n\tMatrice d'adjacence :");
if (! charger_fichier_donnees() ) exit(0);
afficher_matrice_adjacence(); for(i=1; i<=n_G; i++)
prim(); { printf("\n");
afficher_arbre_couvrant(); for(j=1; j<=n_G; j++) printf("\t%d",G[i][j]);
return 1; }
} }
… 17
void initialiser_variables() int prim()
{ int i,j; {
for(i=1; i <= n_G; i++) initialiser_variables();
for(j=1; j <= n_G; j++) while(n_S < n_G)
if(G[i][j] == 0) G[i][j] = Inf; {
detecte_arete_minimale();
S[1] = 1;
n_S = 1; A[++n_A][1] = a_min;
A[n_A][2] = b_min;
for(i=1; i <= n_G - 1 ; i++) T[i] = i+1; S[++n_S] = b_min;
n_T = n_G - 1; for(int j=indice; j <= n_T - 1; j++) T[j] = T[j+1];
n_T--;
n_A = 0; poids = poids + G[a_min][b_min];
poids= 0; }
} return 1;
}
int detecte_arete_minimale()
{ int a, b, i,j; void afficher_arbre_couvrant()
double v_min = Inf; {
printf("\n\n\tArbre couvrant de poids minimum : ");
for(i=1; i <= n_S; i++) for(int i=1; i <= n_A; i++) printf("\n\t%d,
{ a = S[i]; %d",A[i][1],A[i][2]);
for(j=1; j <= n_T; j++) printf("\n\n\tPoids de l'arbre : %d",poids);
{ b = T[j]; }
if( G[a][b] < v_min)
{ v_min = G[a][b];
a_min = a;
b_min = b;
indice = j;
}
}
}
return 1;
}
Exécution du programme C 18
Les données (matrice d’adjacence) sont Etape 2 : on exécute le programme C. Apres le
sauvegardées sur un fichier texte, puis on lance lancement, on saisit le nom du fichier de données :
le programme C précèdent en lui indiquant le
fichier de données sur lequel il doit travailler.
Exemple : Reprenons le graphe à 9 sommets de la
page Algorithme de Prim
Etape 1: on crée un fichier texte nommé
graphe1.txt, contenant :
sur la première ligne : on saisit le nombre de
sommets du graphe (9 dans ce cas)
juste après, on saisit la matrice d’adjacence du Le résultat suivant sera affiché :
graphe comme suit :
3 – Problème du Plus Court
Chemin en Théorie des Graphes
Université Alger 1, Dept Maths & Informatique

Dr. Fodil LAIB

1
Avril 2017
Introduction 2
Problématique : Il y a 2 classes d’algorithmes :
Soit un graphe orienté et valué G=(X,U,W). Classe P1 : Trouver les plus courts chemins entre
un sommet source s et les autres sommets du
Il peut y avoir plusieurs chemins entre deux graphe :
sommets x et y.
Algorithme de Dijkstra
Trouver le chemin le plus court entre x et y.
Algorithme de Bellman
Applications:
Classe P2 : Trouver les plus courts chemins entre
Optimiser le trafic urbain tous les couples de sommets du graphe :
Navigation des rebots Algorithme de Dantzig
Traitement de texte (Latex) Algorithme de Floyd
Conception des cartes électroniques
Appels de fonctions dans les algorithmes Notation : Selon le besoin, on note
avancés Les valeurs des arcs 𝑢, ⋯ , 𝑢𝑚 ∈ 𝑈 par 𝑤1 , ⋯ , 𝑤𝑚
Routage des messages dans les avec 𝑊 = 𝑤1 , ⋯ , 𝑤𝑚 .
télécommunications • La valeur de l’arc 𝑥, 𝑦 ∈ 𝑈 est notée par 𝑤(𝑥, 𝑦)
Quelques Résultats 3
Un circuit absorbant est un circuit dont la longueur Lemme : Si on a
totale est inférieure à 0.
1. G est un graphe simple non orienté connexe, et
4 La longueur du
c 2. 𝑤𝑖 > 0 pour toutes les arêtes,
2 e circuit (c,e,d,c) est w
a = 4-2-3 = -1 alors P1 et P2 ont une solution à partir de tout
-3 -2 circuit absorbant sommet de G.
9
Remarque : Cette solution n’est pas
2 d
nécessairement unique.
-5 La longueur du circuit
b (a,d,b,a) est w = 9-5+2 = 6
circuit non absorbant
Théorème : Tout sous-chemin 𝑥𝑖 ⋯ 𝑥𝑗 d’un chemin
optimal 𝑥1 ⋯ 𝑥𝑖 ⋯ 𝑥𝑗 ⋯ 𝑥𝑘 est un chemin optimal
entre 𝑥𝑖 et 𝑥𝑗 .
Théorème 1: Le problème P1 admet une solution
dans le graphe G=(X,U,W) à partir d’un sommet
𝑠 ∈ 𝑋 si et seulement si
Théorème : La suite 𝐷 1 , ⋯ , 𝐷(𝑛) représente les plus
1. Il existe un chemin entre s et tous les autres courtes distances de la source s vers les autres
sommets, et sommets si et seulement si
2. G est sans circuit absorbant. 1. 𝐷 1 = 0, et
2. 𝐷(𝑦) ≤ 𝐷 𝑥 + 𝑤 𝑥, 𝑦 , ∀(𝑥, 𝑦) ∈ 𝑈.
Algorithme de Dijkstra (1959) 4
Il permet de résoudre P1 pour 𝑤𝑖 > 0 pour tous les i. Exemple 1 : Appliquer l’algorithme de Dijkstra pour
retrouver les plus courts chemins entre le sommet 𝑎
Procedure Dijkstra : Recherche des Plus Courts et les autres sommets du graphe suivant :
Chemins
5 6
a c e
Input: G(X,U,W) et s 7 5
6
Output: D et P 3 2 3 2

• 𝐷 𝑠 = 0 et 𝐷 𝑥 = ∞ pour 𝑥 ∈ 𝑋/𝑥 b 2
d f g
9 1
• ∀ 𝑥 ∈ 𝑋, 𝑃 𝑥 = ∅
•𝐹=𝑋 1iere approche : Graphique

Tant que 𝐹 ≠ ∅ Faire


Initialisation :
•Trouver 𝑥 tel que 𝐷 𝑥 = min 𝐷(𝑧)
𝑧∈𝐹
0 ∞ ∞
•𝐹 = 𝐹 − 𝑥 5 6
Pour tout 𝑦 ∈ 𝑆𝑢𝑐𝑐𝑒𝑠𝑠𝑒𝑢𝑟𝑠(𝑥) Faire a c e
Si 𝐷 𝑦 > 𝑑 𝑥 + 𝑤(𝑥, 𝑦) Alors 6 7 5
3 2 3 2
𝐷 𝑦 = 𝑑 𝑥 + 𝑤(𝑥, 𝑦)
𝑃 𝑦 =𝑥 b d f g
2 9 1
Fin SI ∞ ∞ ∞ ∞
Fin Pour
Fin Tant que
… 5
Itération 1: Itération 3 :

0 5 ∞ ∞ ∞
5 6 0 5a 11c
a c e 5 6
a c e
6 7 5
3 2 3 2 7 5
6
3 2 3 2
b 2
d f g
9 1 b d f g
∞ ∞ ∞ ∞ 2 9 1
3a 6a ∞ ∞ ∞ ∞
Itération 2 : 3a 6a 8c 12c
5b
Itération 4 :
∞ ∞ ∞
0 5a ∞ 0
5 6 5a 11c
a c e 5 6
a c e
6 7 5 5
3 2 2 6 7
3 3 2 3 2

b d f g b d f
2 9 1 2 9 1 g
∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞
3a 6a 3a 6a 8c 12c
5b 5b
… 6
Itération 5 : Résultat de l’algorithme
∞ ∞ 0 5
0 11
5a 11c 5 6
a
5
c
6
e a c e

6 7 5 3 3
3 2 3 2

b d b d f g
2
f g 2 1
9 1 3 5 8 9
∞ ∞ ∞ ∞
3a 6a 8c 12c
5b 9f

Itération 6 : a 𝒃 𝒄 𝒅 𝒆 𝒇 𝒈
∞ ∞
0
D 0 3 5 5 11 8 9
5a 11c
5 6
a c e P ∅ a a b c c f
6 7 5
3 2 3 2

b 2
d f g
9 1
∞ ∞ ∞ ∞
3a 6a 8c 12c
5b 9f
… 7
2ieme approche : Tableau
5 6 a 𝒃 𝒄 𝒅 𝒆 𝒇 𝒈
a c e
7 5 D 0 3 5 5 11 8 9
6
3 2 3 2
P ∅ a a b c c f
b 2
d f g
9 1

a b c d e f g 0 5 11
5 6
0 ∞ ∞ ∞ ∞ ∞ ∞ a c e

a 0 𝟑𝒂 𝟓𝒂 𝟔𝒂 ∞ ∞ ∞ 3 3

b 0 𝟑𝒂 𝟓𝒂 𝟓𝒃 ∞ ∞ ∞ b d f g
2 1
3 5 8 9
c 0 𝟑𝒂 𝟓𝒂 𝟓𝒃 𝟏𝟏𝒄 𝟖𝒄 𝟏𝟐𝒄
d 0 𝟑𝒂 𝟓𝒂 𝟓𝒃 𝟏𝟏𝒄 𝟖𝒄 𝟏𝟐𝒄
f 0 𝟑𝒂 𝟓𝒂 𝟓𝒃 𝟏𝟏𝒄 𝟖𝒄 𝟗𝒇
g 0 𝟑𝒂 𝟓𝒂 𝟓𝒃 𝟏𝟏𝒄 𝟖𝒄 𝟗𝒇
… 8
Exemple 2 : Appliquer l’algorithme de Dijkstra pour
déterminer les plus courts chemins en partant du a 𝒃 𝒄 𝒅 𝒆 𝒇 𝒈
sommet 𝑎 du graphe ci-dessous : f D 0 4 3 9 7 11 12
5 2
b d
6 3
P ∅ a a b a d e
11 10
4 2 11
c
3 8 g f
4 9 2
5
a e 5 b d
7
Solution :
3
a b c d e f g 4 12
c
0 ∞ ∞ ∞ ∞ ∞ ∞ 3
7 g
a 0 𝟒𝒂 𝟑𝒂 ∞ 𝟕𝒂 ∞ ∞ a e 5
7
0
c 0 𝟒𝒂 𝟑𝒂 𝟏𝟒𝒄 𝟕𝒂 ∞ ∞
b 0 𝟒𝒂 𝟑𝒂 𝟗𝒃 𝟕𝒂 ∞ ∞
Complexité : La complexité temporelle de
e 0 𝟒𝒂 𝟑𝒂 𝟗𝒃 𝟕𝒂 ∞ 𝟏𝟐𝒆 l’algorithme de Dijkstra est O(|X|²).
d 0 𝟒𝒂 𝟑𝒂 𝟗𝒃 𝟕𝒂 𝟏𝟏𝒅 𝟏𝟐𝒆
f 0 𝟒𝒂 𝟑𝒂 𝟗𝒃 𝟕𝒂 𝟏𝟏𝒅 𝟏𝟐𝒆
Algorithme de Bellman (1956) 9
Procedure Bellman : Recherche des Plus Courts L’algorithme de Bellman (appelé aussi
Chemins algorithme de Bellman-Ford) retrouve les plus
Input: G(X,U,W) et s courts chemins à partir d’un sommet de départ
Output: D et P même si certains arcs portent des valeurs
• 𝐷 𝑠 = 0 et 𝐷 𝑥 = ∞ pour 𝑥 ∈ 𝑋/𝑥 négatives.
• ∀ 𝑥 ∈ 𝑋, 𝑃 𝑥 = ∅ Son principe : pour chaque sommet du graphe,
// Rechercher les plus courts chemins on parcourt séquentiellement tous les arcs pour
Pour i allant de 1 à |X|-1 Faire voir si on peut améliorer les distances.
Pour tout arc (𝑢, 𝑣) ∈ 𝑈 Faire
Si 𝐷 𝑣 > 𝐷 𝑢 + 𝑤(𝑢, 𝑣) Alors La deuxième partie de l’algorithme vérifie s’il
𝐷 𝑣 = 𝐷 𝑢 + 𝑤(𝑢, 𝑣) n’existe pas de circuit absorbant dans le graphe.
𝑃 𝑣 =𝑢 Remarque : Cet algorithme peut s’arrêter avant la
Fin Si (|X|-1)ieme itération si à l’issue d’une itération
Fin Pour 𝑘 < |𝑋| − 1, on n’arrive pas à améliorer la distance
Fin Pour d’aucun des sommets.
// Détecter circuit absorbant
Pour tout arc (𝑢, 𝑣) ∈ 𝑈 Faire
Si 𝐷 𝑢 + 𝑤 𝑢, 𝑣 < 𝐷 𝑣 Alors Complexité : La complexité de l’algorithme de
Retourner « Il existe un circuit absorbant » Bellman est O(|X|3).
Fin SI
Fin Pour
Retourner « Pas de circuit absorbant »
… 10
,
Exemple 1 : Appliquer l’algorithme de Bellman A chaque itération, le parcourt séquentiel des
pour retrouver les plus courts chemins entre le arcs de ce graphe doit se faire dans l’ordre
sommet 𝑎 et les autres sommets du graphe suivant :
suivant : a 5 c
6
e
ab, ac, ad,

6 7 5 ba, bd,
3 2 3 2
ca, cd, ce, cf, cg,
b d f g
2 9 1 da, db, dc, df,
ec, ef,eg
Solution
fc, fd, fe, fg
Initialisation : On initialise 𝐷 𝑎 = 0 et 𝐷 𝑥 = ∞
pour les autres sommets gc, ge, gf

0 ∞ ∞
5 6
a c e
6 7 5
3 2 3 2

b 2
d f g
9 1
∞ ∞ ∞ ∞
… 11
, approche : Graphique
1iere l’arête (a,d), on améliore D(d) : D(d) = 6

0 5a ∞
Itération 1 : On parcourt toutes les arêtes du 5 6
graphe pour voir si on peut améliorer certaines a c e
7 5
distances : 3
6
2 3 2

Avec l’arête (a,b), on améliore D(b) : D(b) = 3 b d f


2 9 1 g
0 ∞ ∞ ∞ ∞ ∞
5 6 ∞
a c e 3a 6a

6 7 5
3 2 3 2
l’arête (b,a), aucune amélioration
b d f g

2

9

1 l’arête (b,d), on améliore D(d) : D(d) = 3+2=5

3a

0 5a ∞
Avec l’arête (a,c), ∞
on améliore D(c) : D(c) = 5 5 6
0
a c e
5a ∞
5 6 6 7 5
a c e 3 2 3 2
6 7 5
3 2 2 b d
3
2
f g
9 1
∞ ∞ ∞ ∞
b 2
d f g 3a 6a
9 1
∞ ∞ ∞ ∞ 5b
3a
… 12
, Arête (c,a), aucune amélioration Arête (c,g), on améliore D(g) : D(g) = 5+7=12
∞ ∞
Arête (c,d), aucune amélioration 0 5a 11c
5 6
Arête (c,e), on améliore D(e): D(e)=5+6=11 a c e
6 7 5
∞ ∞ 3 2 3 2
0 5a 11c
5 6 b d
a c e 2
f g
9 1
∞ 6a ∞ ∞
6 7 5
3 2 2 3a 5b 8c 12c
3

b 2
d f g Les arêtes (d,a), (d,b), (d,c), (d,f) : aucune
9 1
∞ 6a ∞ ∞ amélioration
3a 5b
Arête (c,f), on améliore D(f) : D(f) = 5+3=8 Les arêtes (e,c), (e,f), (e,g) : aucune amélioration
Les arêtes (f,c), (f,d), (f,e), aucune amélioration
∞ ∞
0 5a 11c
5 6
a c e
6 7 5
3 2 3 2

b 2
d f g
9 1
∞ 6a ∞ ∞
3a 5b 8c
… 13
Arête (f,g), on améliore D(g) : D(g)=8+1=9 Les arêtes (c,a), (c,d), (c,e), (c,f), (c,g) : aucune
∞ ∞ amélioration
0 5a 11c
5 6 Les arêtes (d,a), (d,b), (d,c), (d,f) : aucune
a c e
amélioration
6 7 5
3 2 3 2
Les arêtes (e,c), (e,f), (e,g) : aucune amélioration
b 2
d f g Les arêtes (f,c), (f,d), (f,e), (f,g) : aucune
9 1
∞ 6a ∞ 12c amélioration
3a 5b 8c 9f
Les arêtes (g,c), (g,e), (g,f) : aucune Les arêtes (g,c), (g,e), (g,f) : aucune
amélioration amélioration
L’itération 2 n’améliore aucune distances D(x), on
arrête donc l’algorithme à ce niveau. Et comme le
Itération 2 : On parcourt à nouveau toutes les arêtes
nombre d’itération 𝑖 = 2 < |𝑋| − 1 = 7 − 1 = 6, la
du graphe pour voir si on peut améliorer certaines
solution obtenue est optimale.
distances :
Les chemins obtenus sont :
Les arêtes (a,b), (a,c), (a,d) : aucune
amélioration a 𝒃 𝒄 𝒅 𝒆 𝒇 𝒈
Les arêtes (b,a), (b,d) : aucune amélioration D 0 3 5 5 11 8 9

P ∅ a a b c c f
… a b c d e f g
14
ab 3
2° approche : Tableau
ac 5
On affiche seulement les arcs qui améliorent les
0 ∞ ∞ ad 6
distances. 5 6
a c e
bd 5
6 7 5
3 2 3 2 ce 11
b 2
d f g cf 8
9 1
∞ ∞ ∞ ∞
Initialisation : cg 12
fg 9
a b c d e f g
Itération 2 :
0 ∞ ∞ ∞ ∞ ∞ ∞
On parcourt à nouveaux tous les 24 arêtes du
graphe. On constate qu’aucun d’eux n’améliore la
Itération 1 : distance d’un sommet. On arrête donc à cette
itération. Cette solution est optimale.

a 𝒃 𝒄 𝒅 𝒆 𝒇 𝒈
D 0 3 5 5 11 8 9

P ∅ a a b c c f
… Itération 1 :
15
a b c d e f g
Exemple 2 (avec circuit absorbant) : Utiliser
0 ∞ ∞ ∞ ∞ ∞ ∞
l’algorithme de Bellman pour retrouver les plus
courts chemins partant du sommet 𝑎 pour le graphe ab 4
ci-dessous : ac 3
5
b d bd 9
11 3
4 6 ce 11
c 2 -10 f df 12
a 3
8 eg 13
g 5
-7 gd 3
2
e
Solution
Itération 2 :
Initialisation :
a b c d e f g
0 4 3 3 11 12 13
a b c d e f g df 6
0 ∞ ∞ ∞ ∞ ∞ ∞ fg 11
gd 1
… b
5
d
Itération 4 :
16
11 3 a b c d e f g
4 6
0 4 3 -1 11 4 9
c 2 -10 f
a 3 df 2
8
g 5 fg 7
-7
2 gd -3
e
Itération 3 : Itération 5 :
a b c d e f g a b c d e f g
0 4 3 1 11 6 11 0 4 3 -3 11 2 7
df 4 df 0
fg 9 fg 5
gd -1 gd -5
… 5
b d 17
11 3
4 6 Itération 7 :
c 2 -10 f a b c d E f g
a 3
8
5
0 4 3 -7 11 -2 3
g
-7 df -4
2
e fg 1
Itération 6 : gd -9
a b c d e f g
Cette 7° itération améliore les distances, donc il y a
0 4 3 -5 11 0 5 un circuit absorbant dans ce graphe.
df -2
fg 3
gd -7

L’itération 6 doit être la dernière (|X|-1 = 7-1=6).


Faisant une itération de plus pour voir s’il y aurait un
circuit absorbant.
Algorithme de Dantzig 18
Il détermine les plus courts chemins entre tous les où
couples de sommets (x,y) du graphe (problème 𝑑𝑖1 𝑑𝑖2 𝑑𝑖3 𝑑𝑖4 est le vecteur des plus
P2). courtes distances entre le sommet 𝑖 et les
autres sommets du graphe, et
Les résultats sont donnés dans
𝑝𝑖1 𝑝𝑖2 𝑝𝑖3 𝑝𝑖4 sont les prédécesseurs des
Matrice des distances 𝐷 = [𝑑𝑖𝑗 ] où 𝑑𝑖𝑗 est la plus
sommets 1, 2, 3 et 4 sur les plus court chemins
courte distance entre les sommets i et j.
à partir du sommet 𝑖, avec 𝑖 = 1 ⋯ 4.
Matrice des prédécesseurs 𝑃 = [𝑝𝑖𝑗 ] où 𝑝𝑖𝑗 est le
Principe de l’algorithme : L’idée est de:
prédécesseur de j dans le plus court chemin entre i
et j. commencer par le graphe 𝐺0 possédant un seul
sommet 𝑥1 et construire les matrices 𝐷 (0) = [0]
Soit le graphe à 4 sommets suivant :
et 𝑃(0) = [1]
2 8 𝑑11 𝑑12 𝑑13 𝑑14
𝑑 𝑑22 𝑑23 𝑑24 Construire le graphe 𝐺1 en ajoutant le sommet
1 3 4 𝐷 = 21 𝑥2 à 𝐺0 , puis construire les matrices
𝑑31 𝑑32 𝑑33 𝑑34
7 0 𝑑21
1 𝑑41 𝑑42 𝑑43 𝑑44 1 𝑑21
8
3 𝐷 (1) = et 𝑃(1) =
𝑑21 0 𝑑21 2
𝑝11 𝑝12 𝑝13 𝑝14 Ajouter graduellement d’autres sommets 𝑥3 ⋯ 𝑥𝑛
𝑝21 𝑝22 𝑝23 𝑝24 jusqu’à l’obtention du graphe 𝐺𝑛 = 𝐺 en
𝑃= 𝑝 𝑝32 𝑝33 𝑝34 construisant au passage les matrices 𝐷(2) ⋯ 𝐷(𝑛−1)
31
𝑝41 𝑝42 𝑝43 𝑝44 et 𝑃(2) ⋯ 𝑃(𝑛−1)
avec 𝐷(𝑛−1) = 𝐷 et𝑃(𝑛−1) = 𝑃
… //Bloc A
𝑑 = 𝐷 𝑖, 𝑗 + 𝑀(𝑗, 𝑘 + 1)
19
Théorème : Si le graphe G est sans circuit absorbant, Si 𝑑 < 𝐷(𝑖, 𝑘 + 1) Alors
l’algorithme de Dantzig résout le problème P2 en un D(i,k+1)=d
temps O(n3). P(i,k+1)=j
Fin Si
Procedure Dantzig : Recherche des Plus Courts
𝑑 = 𝑀 𝑘 + 1, 𝑗 + 𝐷 𝑗, 𝑖
Chemins entre tous les couples de sommets
Input: M //matrice d’adjacence
Si 𝑑 < 𝐷(𝑘 + 1, 𝑖) Alors
Output : 𝐷 = 𝑑𝑖𝑗 et 𝑃 = 𝑝𝑖𝑗
𝐷 𝑘 + 1, 𝑖 = 𝑑
Si 𝑖 = 𝑗 Alors
//Initialisation , n = dimension(M)
pour 𝑖, 𝑗 = 1 ⋯ 𝑛, 𝑑𝑖𝑗 = ∞, 𝑑𝑖𝑖 = 0, 𝑝𝑖𝑗 = 0, 𝑝𝑖𝑖 = 𝑖 𝑃 𝑘 + 1, 𝑖 = 𝑘 + 1
Sinon
Pour k allant de 1à n-1 Faire 𝑃 𝑘 + 1, 𝑖 = 𝑃(𝑗, 𝑖)
Pour i allant de 1 à k Faire Fin Si
Pour j allant de 1 à k Faire Fin Si
//insérer ici Bloc A
Fin Pour j
Fin Pour i //Bloc B
Pour 1 allant de 1 à k Faire 𝑑 = 𝐷 𝑖, 𝑘 + 1 + 𝐷(𝑘 + 1, 𝑗)
Pour j allant de 1 à k Faire Si 𝑑<D(i,j) Alors
//insérer ici Bloc B D(i,j)=d
Fin Pour j P(i,j)=P(k+1,j)
Fin Pour i Fin Si
Fin Pour k
… 20
Exemple : Utiliser l’algorithme de Dantzig pour K = 1 : On ajoute le sommet {2}
retrouver tous les plus courts chemins entre les 0 ∞ 1 0
𝐷 (1) = , 𝑃(1) = 1
sommets du graphe suivants : 3 0 2 2
2
1 5 3
6 3
3
3 2 1 1
2
3
1 K = 2 : On ajoute le sommet {3}
2 2
4 6
1
1
6
Solution :
0 ∞ 6 2 ∞ ∞ 3
3
3 0 ∞ ∞ ∞ ∞
∞ ∞ 0 1 3 1
𝑀=
∞ 2 3 0 ∞ ∞ 2
2 ∞ ∞ ∞ 0 ∞
∞ ∞ ∞ 1 1 0 0 ∞ 6 1 0 1
K = 0 : On commence avec le sommet {1} 𝐷 (2) = 3 0 9, 𝑃(2) = 2 2 1
1 ∞ ∞ 0 0 0 3
𝐷 (0) = 0 , 𝑃(0) = 1
… 0
3
4
0
5
8
2
5
8
11
1 4
2 2
4
4
1
1
3
3 21
K = 3 : On ajoute le sommet 4 𝐷 (4) = 5 3 0 1 3 , 𝑃(4) = 5 4 3 3 3
1 5 2 3 0 6 2 4 4 4 3
6 2 6 7 4 0 5 4 4 1 5
3
3 2 K = 5 : On ajoute le sommet {6}
3 2
1 1 5
2 4 6 3
2
3
3 2 1 1
0 4 5 2 1 4 4 1
3
3 0 8 5 2 2 4 1 1
𝐷 (3) = , 𝑃(3) =
6 3 0 1 2 4 3 3 2 4 6
2 1
5 2 3 0 2 4 4 4

K = 4 : On ajoute le sommet {5} 0 4 5 2 7 6 1 4 4 1 6 3


3 0 8 5 10 9 2 2 4 1 6 3
2 4 3 0 1 2 1 5 4 3 3 6 3
1 5 𝐷 (5) = , 𝑃(5) =
6 3 5 2 3 0 5 4 2 4 4 4 6 3
3 2 6 7 4 0 8 5 4 4 1 5 3
3 2 3 3 4 1 1 0 5 4 4 6 6 6
3
1
2 2
4
4 – Problème de Flots en Théorie
des Graphes
Université Alger 1, Dept Maths & Informatique

Dr. Fodil LAIB

1
Mai 2017
Flot dans un Réseau 2
Un réseau est un graphe orienté et valué 2) Le flot qui traverse un sommet 𝑥 est conservé c-
G=(X,U,W) ayant deux sommets particuliers : la à-d :
2/3 3/5
source 𝒔 et le puit 𝒕. 𝑓(𝑦, 𝑥) = 𝑓(𝑥, 𝑦) 5/5
2
5 6
𝑦∈𝑑− 𝑥 𝑦∈𝑑+ 𝑥 5/5
1/4
7 3 4
Flot Flot
4 5 entrant= 8 sortant= 8
1

Un flot est une quantité de matière 3) Le flot total 𝑓 envoyé de la source 𝑠 arrive au
puits 𝑡 c-à-d
(marchandise, eau, électricité, information, etc.)
envoyée par le sommet s, elle traverse certains 𝑓= 𝑓(𝑠, 𝑦) = 𝑓(𝑦, 𝑡)
arcs du graphe, pour atteindre le puits t. 𝑦∈𝑑+ 𝑠 𝑦∈𝑑− 𝑡
2/2
2/5 3/6

0/7 0/3 1/4 Le problème du flot maximum consiste à trouver


4/4 les valeurs des flots élémentaires 𝑓(𝑢), ∀ 𝑢 ∈ 𝑈
3/3 𝑓𝑡 =6 qui maximisent le flot total 𝑓.
4/5

Un flot réalisable vérifie les 3 contraintes suivantes : Notation : La matrice des flots élémentaire est
𝐹 = [𝑓𝑖𝑗 ] où 𝑓𝑖𝑗 est le flot de l’arc (𝑖, 𝑗) ∈ 𝑈. On a bien
1) Le flot 𝑓(𝑢) qui traverse l’arc 𝑢 ∈ 𝑈 vérifie la 𝑛 𝑛
contrainte de capacité :
𝑓= 𝑓𝑖𝑗
0 ≤ 𝑓(𝑢) ≤ 𝑤(𝑢) 𝑖=1 𝑗=1
Exemple de Flot 3
Soit le réseau de distribution d’eau suivant : Réseau avec plusieurs Sources/puits :

5 5 Si le graphe possède plusieurs sources 𝑠1 ⋯ 𝑠𝑘 ,


6
on ajoute une source fictive 𝑠0 avec
4 2 8
3
8 6 5 𝑤 𝑠0 , 𝑠𝑖 = 𝑤(𝑠𝑖 , 𝑦)
𝑦∈𝑑+ (𝑠𝑖 )
3 4 2
7
7
5 4 Si le graphe possède plusieurs puits 𝑡1 ⋯ 𝑡𝑘 , on
ajoute un puits fictif 𝑡0 avec
𝑐 𝑡𝑖 , 𝑡0 = 𝑐(𝑦, 𝑡𝑖 )
Il est composé des conduites (s,2), (s,4), …: 𝑦∈𝑑− (𝑡𝑖 )

La valeur de chaque arc représente la quantité


maximale que la conduite peut transporter
La source de l’eau est le sommet 𝑠
La destination de l’eau est le sommet 𝑡
Question : Trouver la quantité maximale d’eau
qu’on peut transporter de la source vers la
destination en respectant les capacités des
conduites.
Chaine Améliorante 4
Une chaine C est dite améliorante si elle lie la Sur cette chaine, on peut augmenter le flot de
𝜀 = min(𝜀1 , 𝜀2 )
source 𝑠 au puits 𝑡 et satisfait :
• 𝜀1 = min+ 𝑤 𝑢 − 𝑓(𝑢) où 𝐶 + l’ensemble des arcs
les arcs 𝑢 directs vérifient 𝑓(𝑢) < 𝑤(𝑢) 𝑢𝜖𝐶
directs de la chaine C
les arcs 𝑢 inversés vérifient 𝑓 𝑢 > 0 • 𝜀1 = min−𝑓(𝑢) où 𝐶 − est l’ensemble des arcs indirects
2/2 𝑢𝜖𝐶
de la chaine C.
0/7 1/4
Les nouveaux flots élémentaires 𝑓′ 𝑢 sur cette chaine
seront
4/4
3/3 𝑓 𝑢 + 𝜀, 𝑢 ∈ 𝐶+
𝑓′ 𝑢 =
𝑓 𝑢 − 𝜀, 𝑢 ∈ 𝐶−
• (s,b), (a,c), (d,t) sont des arcs directs
• (a,b), (d,c) sont des arcs inversés On vérifie facilement que le nouveau flot est réalisable.
• Cette chaine n’est pas améliorante car 𝑓(𝑎, 𝑏) ≯ 0 Calcul :
𝜀1 = 𝑚𝑖𝑛 4 − 1,8 − 3 = 𝑚𝑖𝑛 3,5 = 3
1/4 3/3 3/8
2/5 𝜀2 = 𝑚𝑖𝑛 2,3 = 𝑚𝑖𝑛 3,5 = 2
⇒ 𝜀 = min 3,2 = 2
Chaine améliorante car Les nouveaux flots élémentaires sur cette chaine sont
• Les arcs directs vérifient 𝑓 𝑠, 𝑥 < 𝑤(𝑠, 𝑥), 𝑓(𝑠, 𝑥) = 1 + 2 = 3
𝑓(𝑧, 𝑡) < 𝑤(𝑧, 𝑡) 𝑓(𝑦, 𝑥) = 2 − 2 = 0
• Les arcs indirects vérifient 𝑓 𝑦, 𝑥 > 0, 𝑓 𝑧, 𝑦 > 0 𝑓(𝑧, 𝑦) = 3 − 2 = 1 3/4
0/5
1/3 5/8

𝑓(𝑧, 𝑡) = 3 + 2 = 5
𝑓′ = 𝑓 + 𝜀 𝑓′ = 𝑓 + 𝜀
2
Coupe Minimale et Flot Maximum 5
3
6
5
7 4
Une coupe (𝑌, 𝑌 ) est définie par l’ensemble 4 5
𝑌 ⊂ 𝑋 et son compliment 𝑌 tel que 1

𝑌∪𝑌 =𝑋 Soit la coupe 𝑌1 = {𝑠, 𝑎, 𝑏} et 𝑌1 = {𝑐, 𝑑, 𝑡}. La


capacité de cette coupe est 𝑤 𝑌1 , 𝑌1 = 𝑤 𝑎, 𝑐 +
𝑌∩𝑌 =∅ 𝑤 𝑎, 𝑑 + 𝑤 𝑏, 𝑑 = 2 + 3 + 1 = 6
s ∈ Y et t ∈ 𝑌 2
6
5
La capacité d’une coupe est définie par 7 3 4
𝑤 𝑌, 𝑌 = 𝑤(𝑥, 𝑦) − 𝑤(𝑦, 𝑥) 4 5
𝑥∈𝑌,𝑦∈𝑌 𝑥∈𝑌,𝑦∈𝑌 1
Soit la capacité 𝑌2 = {𝑠, 𝑎, 𝑐} et 𝑌2 = {𝑏, 𝑑, 𝑡}. La
Théorème de Ford-Fulkerson : Soit 𝐺 = 𝑋, 𝑈, 𝑊 un
capacité de cette coupe est 𝑤 𝑌2 , 𝑌2 = 𝑤 𝑠, 𝑏 +
graphe valué. Pour tout flot réalisable F, de valeur f,
𝑤 𝑎, 𝑏 + 𝑤 𝑎, 𝑑 − 𝑤 𝑑, 𝑡 + 𝑤 𝑐, 𝑡 = 4 + 7 + 3 − 4 +
et toute coupe (𝑌, 𝑌), on a
6 = 16
2/2
𝑓 ≤ 𝑤 𝑌, 𝑌 . 2/5 3/6

Corolaire : S’il existe un flot 𝐹 ∗ et une coupe 𝑌 ∗ tel 0/7 0/3 1/4
que 𝑓 ∗ = 𝑤 𝑌 ∗ , 𝑌 ∗ alors le flot 𝐹 est maximal. 𝑌 ∗ est 4/4
3/3 𝑓𝑡 =6
appelée coupe minimale. 4/5

On peut verifier que la coupe 𝑌1 , 𝑌1 ci-dessous


est minimale, donc le flot ci-dessous est maximal.
Parcours d’un Graphe Exemple : Utiliser DFS pour trouver toutes les chaines
liant le sommet A au sommet E du graphe suivant : 6
On parcourt un graphe pour de nombreuses raisons :
Enumérer tous les sommets du graphe
Enumérer tous les arcs du graphe
Solution
Trouver un chemin, ou tous les chemins, entre 2
sommets x et y
Détecter les composantes connexes d’un graphe.
Etc.

Algorithme DFS : Parcours en profondeur d’un La 1iere chaine


graphe obtenue est
Input: 𝐺(𝑋, 𝑈), 𝑥 // 𝑥 sommet de départ (A,B,C, E)
Output: 𝐶 // une chaine des sommets parcourus
• Marquer sommet 𝑥 comme visité
Pour tout arc (𝑥, 𝑦) Faire
Si le sommet 𝑦 n’est pas encore visité Alors
• marquer y
• ajouter 𝑦 à 𝐶 comme poursuivant de 𝑥 La 2ime chaine La 3ieme chaine La 4ieme chaine
• DFS(y) // appel récursif de DFS obtenue est obtenue est obtenue est
Fin SI (A, C, E) (A, D, C, E) (A, E)
Fin Pour
Algorithme du Flot Maximum 7
Algorithme Ford-Fulkerson : Flot Maximum Remarque : La recherche des chaines améliorantes
peut se faire à l’aide d’une méthode de parcours
Input: G(X,U,W), s, t de graphe comme DFS.
Output: 𝐹 = 𝑓 𝑢 , 𝑢 ∈ 𝑈 et f // F matrice des flux
passant par chacun des arcs
La complexité temporelle de l ’algorithme de
•𝑓(𝑢) = 0, ∀ 𝑢 ∈ 𝑈, 𝑓 = 0 Ford-Fulkerson est 𝑂 𝑚𝑓 où 𝑚 = |𝑈| et 𝑓 est la
Tant que il existe une chaine améliorante C Faire valeur du flot maximum.
// calculer l’augmentation du flot
𝜀1 = min 𝑤 𝑢 − 𝑓(𝑢) , 𝑢𝜖𝐶 +
Autres algorithme de flot maximum :
𝜀1 = min𝑓(𝑢), 𝑢𝜖𝐶 −
Algorithme de d’Edmonds-Karp : complexité
𝜀 = min 𝜀1 , 𝜀2 𝑂 𝑚²𝑛 (le chemin augmentant est choisi le
// améliorer le flot plus court possible à chaque fois)
𝑓=𝑓+𝜀
𝑓 𝑢 = 𝑓 𝑢 + 𝜀, 𝑢 ∈ 𝐶 + Algorithme de Golberg-Tarjan : complexité
𝑓 𝑢 = 𝑓 𝑢 − 𝜀, 𝑢 ∈ 𝐶 − 𝑂 𝑛3
Fin Tant que
… Itération 2 : Sur la dernière chaine parcourue, le plus
proche sommet ayant un successeur non visité est b8
Exemple 1 : Maximiser le flot dans le graphe suivant Sommet s a b t
0/3
Origine - s a b
0/2 0/2
𝜀 ∞ 1 1 𝜀=1
0/1
2/3

0/2 2/2 1/2


0/1 𝑓𝑡 =6
1/1
Solution
0/2 1/1 𝑓 =1+1=2
Itération 1 : On démarre par le sommet s et marque
en profondeur (DFS) les sommets pour construire
une chaine améliorante Itération 3 : Sur la dernière chaine parcourue, le plus
proche sommet ayant un successeur non visité est s:
Sommet s a b c t Sommet s c b a t
Origine - s a b c Origine - s -c -b b
𝜀 ∞ 2 2 1 𝜀=1 𝜀 ∞ 2 1 1 𝜀=1
1/3
2/3
1/2 0/2
2/2 2/2
1/1
0/1

0/2 1/1 𝑓 =1 1/2 𝑓 =2+1=3


1/1
… 9
Itération 4 : Sur la dernière chaine parcourue, le plus Exemple 2 : Calculer le flot max dans le réseau
proche sommet ayant un successeur non visité est c suivant :
0/4
: Sommet s c 0/10
0/10

Origine - s 0/2
0/8 0/6

𝜀 ∞ 2 0/10
0/10
𝑓=0
0/9
Il n y a plus de chaine améliorante, le flot obtenu
est maximal 2/3

2/2 2/2 Solution


0/1 Itération 1 :
1/2 1/1 𝑓 =3 Sommet s a b t
Origine - s a b
𝜀 ∞ 10 4 𝜀 = 4
Remarque : On a la coupe 𝑌 = {𝑠, 𝑎, 𝑏, 𝑐}, et 𝑌 = {𝑡}
avec 𝑤 𝑌, 𝑌 = 𝑤 𝑏, 𝑡 + 𝑤 𝑐, 𝑡 = 2 + 1 = 3. 4/4
4/10
Puisque 𝑓 = 𝑤 𝑌, 𝑌 , ceci confirme encore une fois 4/10

que ce flot est maximal. 0/2


0/8 0/6

0/10
0/10 𝑓=4
0/9
… Itération 4 :
10
Itération 2 : Sommet s c a d t
Origine - s -c a d
Sommet s a c d b t
𝜀 ∞ 10 2 2 𝜀 =2
Origine - s a c d b 4/4
10/10
𝜀 ∞ 6 2 2 2 𝜀=2 10/10
6/8 6/6
4/4 0/2
6/10
6/10 2/10
2/10 𝑓 = 10 + 2 = 12
0/8 2/6 2/9
2/2
0/10
0/10 𝑓 =4+2=6 Itération 5 :
2/9
Sommet s c d t
Itération 3 :
Origine - s c d
Sommet s a d b t 𝜀 ∞ 8 7 𝜀 =7
Origine - s a d b 4/4
10/10
𝜀 ∞ 4 4 4 𝜀 =4 10/10
6/8 6/6
4/4 0/2
10/10 9/10
10/10 9/10 𝑓 = 12 + 7 = 19
4/8 6/6 9/9
2/2
Il n’y a plus de chaine améliorante, ce flot est max.
0/10
0/10 𝑓 = 6 + 4 = 10
2/9 D’ailleurs la coupe 𝑌 = {𝑠, 𝑎, 𝑐} est de capacité 19.
5 – Méthodes d’Ordonnancement
en Théorie des Graphes
Université Alger 1, Dept Maths & Informatique

Dr. Fodil LAIB

1
Mai 2017
Méthode PERT 2
 PERT = Program Evaluation and Review Le graphe PERT :
Technique.
 représente les taches et les dépendances
 Méthode développée en 1958 aux USA. entre elles;
 Elle permet d’optimiser la gestion des tâches  affiche une date de début au plutôt et une
d’un grand projet impliquant des milliers de date au plus tard pour chaque tâche;
personnes et de taches.
 détermine un chemin critique qui
 La méthode PERT implique : conditionne la durée minimale du projet;
 un découpage du projet en tâches précises;  montre les tâches critiques qu’il faut réaliser
 l’estimation des durées de chaque tache; absolument dans leurs temps, sinon tout le
projet sera retardé.
 détermination des prédécesseurs de chaque
tache.
Une tâche non critique peut être retardée dans la
limite de la marge calculée sans impacter la durée
 La 1iere application a permis de réduire le délai totale du projet.
de réalisation d’un projet de 7 à 4 ans.
Conventions de la Méthode PERT  Le graphe PERT démarre toujours par l’étape
3
D (ou Début) et se termine par l’étape F (Fin).
 Une tâche est représentée par une étiquette sur
une flèche. L’étiquette indique le code de la D F
tâche et sa durée.
𝐵30
 Deux tâches, ou leurs successeurs, ne peuvent pas
 La tâche B ci-dessous dure 30 jours. On note être raccordées aux mêmes étapes de départ et
𝑤(𝐵) = 30 de fin.
 Une étape : représente le début où la fin d’une A10
tâche. Elle est visualisée par un cercle ayant 3 𝟐 𝟑 C25
portions : B20
 𝑥 : numéro de l’étape (facultatif)
𝒙 Erreur
 𝑡1 : date au plutôt
𝒕𝟏 𝒕𝟐  𝑡2 : date au plus tard
 Pour y remédier, il faut ajouter une tâche fictive en
pointillés de durée 0.
 La tâche C10 démarre à l’étape 3 et se termine 𝟐 A10 𝟑 C25
à l’étape 5. 3 C10 5

4
 Une Etape peut recevoir et 4
Correct
émettre plusieurs tâches :

Exemple 1 : Soit les taches suivantes d’un projet Calcul des dates au plutôt :
4
Tâches Prédécesseurs Durées  Etape 𝐷, on pose 𝑡1 (𝐷) = 0.
A - 2  Etape 𝑦 : 𝑡1 (𝑦) = max

𝑡1 (𝑥) + 𝑤(𝑥, 𝑦) .
𝑥∈𝑑 (𝑦)
B - 3
1
C A 4 2 Etape 1 : 0 +2 = 2
D Etape 2: 0 + 3 = 3
D B 2 3 E1 F
0 6 7
Etape 3 : max{2+4; 3+2} = 6
E C, D 1 Etape F : 6+1=7
2
Le graphe PERT 1 3
correspondant est :
D 3 F
E1
Calcul des date au plus tard :
2
 Etape 𝐹 : 𝑡2 (𝐹) = 𝑡1 (𝐹) (ici, 𝑡2 𝐹 = 7).
 Etape 𝑥 : 𝑡2 (𝑥) = min 𝑡2 𝑦 − 𝑤(𝑥, 𝑦)
Sur le graphe, on constate bien que : +
𝑦∈𝑑 (𝑥)

 Chaque tâche (arc) est précédée et suivie par


une étape (sommet)
1
 les tâches A et B n’ont pas de prédécesseurs, Etape 3 : 7 - 1 = 6
2 2
D
Etape 2 : 6 - 4 = 2
3 F
 la tâche C est précédée par A, 0 0
E1 Etape 1 : 6 - 4= 2
6 6 7 7 Etape D : min{2-2; 4-3} = 0
 la tâche D est précédée par B,
2
 la tâche E est précédée par C et D. 3 4
Construction d’un Réseau PERT 5
Exemple 2 : Les Niveaux du Graphe :
Tableau des tâches : Exemple d’un projet de 7  Les tâches de Niveau 1 sont celles qui n’ont pas
tâches : de prédécesseurs.

Tâches Prédécesseurs Durées  Les tâches de Niveau 2 sont celles dont les
prédécesseurs sont ceux de Niveau 1.
A - 5
 Les tâches de Niveau 3 sont celles dont les
B D 3 prédécesseurs sont ceux de Niveau 2. Etc.
C D 6
D - 2 Tâches Prédécesseurs Niveaux Successeurs

E B, H 3 A - Niveau 1 G
1
F C 1 B D Niveau 2 E

G A 2 C D1 Niveau 2 F, H

H C 2 D - Niveau 1 B, C
2
E B, H3 Niveau 4 -
Remarque : A priori, ce projet peut durer 24 jours (la F C
2
Niveau 3 -
somme des durées.
G A1 Niveau 2 -
Solution : D’abord, on détermine les niveaux et les 2
successeurs de chaque tâche. H C Niveau 3 E
… 3) On ajoute les tâches de niveau 3, soient F et H
comme successeurs de C. Puis on ajoute E (niveau 6
Construction progressive du graphe PERT : 4) comme successeur de B et H.
1) On commence par les tâches de niveau1, soient
A et D, qu’on raccorde au sommet Départ (D).
D
B E F

D
H

2) On ajoute les tâches de niveau 2, soient B, C et


G, avec G étant le successeur de A; et B et C 4) On affiche les durées de chaque tâche, et on
successeurs de D. numérote les étapes.
1
D
F
B
D
3 E3 F
B3
2

H2

4
Attention : A chaque fois, on doit s’assurer que les tâches de
niveau k-1 soient connectées à leurs successeurs de niveau k.
… • Une étape critique 𝑥 vérifie 𝑡1 (𝑥) = 𝑡2 (𝑥) 7
• La marge 𝑚(𝑢) d’une tâche 𝑢 comprise entre les
Calcul des dates au plutôt (𝒕𝟏 ) : étapes 𝑥 et 𝑦 est : 𝑚(𝑢) = 𝑡2 (𝑦) − 𝑤(𝑢) − 𝑡1 (𝑥)
Etape D : 0 1
Etape 1 : 0 +5 = 5 5 La tâche 𝑢 commence au plutôt à 𝑡1 (𝑥), et au plus tard à
𝑡2 (𝑥). Elle se termine au plutôt à 𝑡1 (𝑦), et au plus tard à
𝑡2 (𝑦). 1
D
3 E3 F 5 11
0 B3
10 13
2
2 D
Etape 2: 0 + 2 = 2 3 E3 F
H2 0 0 B3
Etape 4 : 2 + 6 = 8 10 10 13 13
2
Etape 3 : max{2+3; 8+2} = 10 4 2 2
Etape F : max{5+2; 10+3; 8+1} = 13 8 H2
Calcul des marges :
4
Calcul des dates au plus tard (𝒕𝟐 ) : 𝑚 𝐴 = 11 − 5 − 0 = 6
8 8
𝑚 𝐷 =2−2−0=0
Etape F : 13
Etape 1 : 13 - 2 = 11 𝑚 𝐺 = 13 − 2 − 5 = 6 𝑚 𝐻 = 10 − 2 − 8 = 0
1 𝑚 𝐵 = 10 − 3 − 2 = 5
Etape 3 : 13 - 3 = 10 𝑚 𝐸 = 13 − 3 − 10 = 0
5 11
𝑚 𝐶 =8−6−2=0 𝑚 𝐹 = 13 − 1 − 8 = 4
D Interprétation :
0 0 3 E3 F
B3 o La durée minimale du projet est 13 jours.
10 10 13 13
2 o Le chemin critique est composé des tâches D, C, H, E.
2 2 o Un retard sur ces tâches va retarder tout le projet.
H2
Etape 4 : min{13-1; 10-2} = 8 o La tâche non critique A (resp G, B, F) peut être retarder
Etape 2 : min{10-3; 8-6} = 2 4 de 6 jours (resp 6, 5, 4 jours) sans impacter la durée du
Etape D : min{11-5; 2-2} = 0 8 8 projet.
… 8
Exemple 3 : Utiliser la méthode PERT pour optimiser Solution :
la gestion du projet suivant:
Tableau des niveaux et des successeurs :
Tâches Prédécesseurs Durées Tâches Prédécesseurs Niveaux Successeurs
A - 6 A - Niveau 1 C, E, G
B - 2 B - Niveau 1 G
C A 3 C A1 Niveau 2 D, F
D C 4 D C2 Niveau 3 I
E A 1 E A1 Niveau 2 F
2
F C, E 7 F C, E 2 Niveau 3 I
G A, B 2 G A,1 B1 Niveau 2 H
H G 3 H G2 Niveau 3 -
I D, F 4 I D,3 F 3 Niveau 4 -

Somme des durée = 32 jours


… 3) On passe aux tâches de niveau 3, c-à-d D, F et H.9
Graphe PERT : On a F successeur de C, on les lie par une tâche
fictive C’0.
1) On commence par les tâches de niveau 1, c-à-
d A et B.
C’0

F
D A’0
D

2) On passe aux tâches de niveau 2, c-à-d C, E et G. 4) On passe à la tâche I de niveau 4, qui est le
On a G successeur de A, on les lie par une tâche successeur de D et F.
fictive A’0.

C’0

F
A’0 D A’0
D

G G
Calcul des dates au plus tard (𝒕𝟏 ) : 10
… Etape F : 20 Etape 3 : min{16-4; 9-0} = 9
Etape 6 : 20 - 3 = 17 Etape 1 : min{9-3; 9-1; 15-0} = 6
5) On affiche les durées de chaque tâche, et on Etape 5 : 20 - 4 = 16 Etape D : min{6-6; 15-2} = 0
numérote les étapes. 3 Etape 4 : 16 - 7 = 9 3
Etape 2 : 17 - 2 = 15 9 9

1 5 1 5
C’0 C’0 16 16
6 6

4 F 4 F
D A’0 D A’0
9 9 20 20
0 0
2 G2 6 2 G2 6
6 15 8 17

Calcul des dates au plutôt (𝒕𝟏 ) :


Calcul des marges : Interprétation :
Etape D : 0 Etape 4 : max{6+1; 9+0} = 9
Etape 1 : 0 +6 = 6 Etape 5 : max{9+4; 9+7} = 16 𝑚 𝐴 =6−6−0=0 o La durée minimale du projet
Etape 2 : max{6+0; 0+2} = 6 𝑚 𝐵 = 15 − 2 − 0 = 13 est 20 jours.
Etape F : max{16+4; 8+3} = 20
𝑚 𝐶 =9−3−6=0 o Le chemin critique est
Etape 3 : 6 +3 = 9 3
𝑚 𝐷 = 16 − 4 − 9 = 3 composé des tâches A, C, F, I.
Etape 6 : 6 +2 = 8 9
𝑚 𝐸 =9−1−6= 2 o Les tâches non critiques sont
1
C’0
5 𝑚 𝐹 = 16 − 7 − 9 = 0 B, D, E, G et H. Elles disposent
6 16
𝑚 𝐺 = 17 − 2 − 6 = 9 respectivement des marges
F 𝑚 𝐻 = 20 − 3 − 8 =9 13, 3, 2, 9 et 9 jours.
A’0 4
D
9 20 𝑚 𝐼 = 20 − 4 − 16 = 0
0
2 G2 6
6 8
Diagramme de Gantt (1910) 11
 Le diagramme de Gantt permet de visualiser sur Exemple 4 : Soit un projet dont les dates de débuts
un plan à deux dimensions le déroulement des et les durées sont comme suit :
tâches d’un projet.
Tâches Débuts Durées Fin
 Cette méthode suppose connus : A 01/03/2017 2 03/03/2017
B 01/03/2017 3 04/03/2017
 les dates de début de chaque tâche, C 03/03/2017 4 07/03/2017
 les durées de chaque tâche. D 05/03/2017 2 07/03/2017
E 07/03/2017 1 08/03/2017
 Parfois, on peut ajouter les dépendances entre
les tâches.
Le diagramme de Gantt correspondant est :
Les Tâches

1-mars 2-mars 3-mars 4-mars 5-mars 6-mars 7-mars 8-mars 9-mars

Tâche A
A
Tâche B
Tâche C B

Tâche D
C
Tâche E
Temps D

Sur ce diagramme, la tâche B ne peut commencer E


avant la fin de A, et E commence après la terminaison
de B.
… 12
Exemple 5 : Reprenons les données de l’exemple 3
Le diagramme de Gantt correspondant (réalisé
(page 8). Le graphe PERT correspondant est :
3
avec Excel) est le suivant :
9 9 1-mars 3-mars 5-mars 7-mars 9-mars 11-mars 13-mars 15-mars 17-mars 19-mars 21-mars

A A, 6
1 5
6 6
C’0 16 16 B B, 2

C C, 3

4 F
D A’0 D D, 4
9 9 20 20
0 0 E E, 1

F F, 7
2 G2 6
6 15 G G, 2
8 17
H H, 3
Considérons que le projet démarre le 01/03/2017. I I, 4
La date de Début de chaque tâche correspond à 𝑡2
de l’étape qui la précède.
Tâches Prédécesseurs Durées 𝑡2 Débuts
 La tâche critique A doit absolument démarrer le
A - 6 0 01/03/2017 01/03/2017 pour éviter un retard au projet.
B - 2 0 01/03/2017  La tâche non critique B peut commencer à
C A 3 6 07/03/2017 n’importe quel jour, l’essentiel est qu’elle se
D C 4 9 10/03/2017 termine au plus tard le 07/03/2017 afin d’éviter
E A 1 6 07/03/2017
tout retard au projet.
F C, E 7 9 10/03/2017
G A, B 2 15 16/03/2017
H G 3 17 18/03/2017
I D, F 4 16 17/03/2017

Vous aimerez peut-être aussi