Cours 4
Cours 4
Cours 4
Janvier 2019
Introduction
1
Soit la relation R sur {1, 2, 3, 4, 5, 6} définie par:
6 2
Graphe orienté
1
Soit la relation R sur {1, 2, 3, 4, 5, 6} définie par:
6 2
x R y ssi x et y sont premier entre eux
5 3
4
En réalité:
1 2
1 2
Une boucle:
On parle de multigraphe (orienté ou non orienté) si on autorise plusieurs arêtes
(ou arcs) entre deux sommets (arêtes multiples).
Exemples
u
d(u) = 5
∆(G) = 5
δ(G) = 2
−
d (u) = 2
d + (u) = 4
d(u) = 6
u
2 + 5 + 2 + 3 = 2 × 6 = 12
1 2
12232412 est un chemin
123 est un chemin élémentaire
12243241 est un cycle
2342 est un cycle élémentaire
4 3
3 4
322524 est une chaîne
1243 est une chaîne élémentaire
2
34223 est une chemin chaîne
2342 est un circuit élémentaire
1 5
Connexité
Un graphe non orienté est connexe si pour tous sommets u et v il existe un
chemin allant de u à v .
Un graphe orienté est connexe (resp. fortement connexe) si pour tous sommets
u et v il existe une chaîne (resp. un chemin) allant de u à v .
Alger
8 5
Oran 11 Constantine
3 2
Djelfa
Figure: Un chemin
Figure: Un cycle Figure: Un arbre
Un graphe est complet si tous ses sommets sont reliés deux à deux.
K1
K3
K2 K4
X Y X Y
Figure: Graphe biparti Figure: Graphe biparti complet
liste:
arbre:
graphe orienté:
Matrice d’adjacence
À tout graphe G, orienté ou non, on peut associer sa matrice d’adjacence
Ma = Ma (G). Cette matrice est une matrice carrée dont les éléments sont définis
par:
1, s’il existe un arc (ou une arête) allant de i vers j.
Ma (i, j)
0, sinon.
Si le graphe G est non orienté, la matrice Ma (G) est symétrique.
a b c d
a b a 0 1 1 0
0 1 1 0
b 1 1 1 0 1 1 1 0
Ma =
1
c 1 1 0 1 1 0 1
d 0 0 1 0 0 0 1 0
c d
Matrice d’adjacence
a b c d
a b
0 1 0 0
a 0 1 0 0
b 0 0 1 0 0 0 1 0
Ma =
1
c 1 0 0 1 0 0 1
c d 0 0 0 0 0 0 0 0
d
Propriété
Soit G un graphe, orienté ou non, et Ma sa matrice d’adjacence. La puissance
k ième Mak de la matrice Ma est telle que l’élément Mak (i, j) correspond au nombre
de chemins de longueur k allant de i vers j.
0 1 1 0 0 2 1 1 1 0
a b 1 0 1 0 0 1 2 1 1 0
Ma2 =
Ma =
1 1 0 1 0
1 1 3 0 1
0 0 1 0 1 1 1 0 1 0
e
c 0 0 0 1 0 0 0 1 0 1
d
Optimisation Janvier 2019 16 / 25
Représentation des graphes Matrice d’adjacence
Propriété
Regardons, par exemple, les chemins de longueur 2 issus du sommet 2 (3ème ligne
de la matrice Ma2 ):
1 chemin de c vers a: cba.
1 chemin de c vers b: cab.
3 chemins de c vers c: cac, cbc et cdc.
aucun chemin de c vers d.
1 chemin de c vers e: cde.
a b
e
c d
Liste d’adjacence
Une autre façon classique de représenter un graphe est d’associer à chaque
sommet la liste de ses voisins (graphe non orienté) ou de ses successeurs (graphe
orienté). Généralement, ces listes sont triées par ordre croissant.
a b a −→ b, c.
b −→ a, b, c.
c −→ a, b, d.
c d d −→ c.
a b a −→ b.
b −→ c.
c −→ a, d.
c d d −→.
Objectif
Soit un graphe étiqueté et valué par des nombres. Quel est le chemin le plus court
pour aller d’un nœud A à un nœud B?
Plusieurs algorithmes: Dijkstra, Floyd, Bellman-Ford, etc.
18
B C
6 5 9
7
18 8
A D G H
11 4
14
13
19
E F
Dijkstra
E. W. Dijkstra a proposé en 1959 un algorithme qui permet de déterminer le plus
court chemin entre deux sommets d’un graphe connexe pondéré (orienté ou non)
dont le poids lié aux arêtes est positif.
L’algorithme dû à Dijkstra est basé sur le principe suivant:
Si le plus court chemin reliant le sommet de départ s0 à un autre sommet S
passe par les sommets s1 , s2 , . . . , sk alors, les différentes étapes sont aussi les
plus courts chemins reliant A aux différents sommets si .
On construit de proche en proche le chemin cherché en choisissant à chaque
itération de l’algorithme, un sommet si du graphe parmi ceux qui n’ont pas
encore été traités, tel que la longueur connue provisoirement du plus court
chemin allant de s0 à si soit la plus courte possible.
L’algorithme comporte une phase d’initialisation. À chaque sommet on
attribue un poids qui vaut 0 pour le sommet de départ et infini pour les
autres sommets.
A B C D E F G H Fixés
0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ A(0)
On affecte le poids 0 au sommet origine A et on attribue
provisoirement un poids ∞ aux autres sommets.
Le sommet A de poids 0 est sélectionné.
7(A) ∞ ∞ 14(B) ∞ ∞ ∞ B(7)
Le sommet A de poids 0 ayant été sélectionné, on marque
provisoirement les sommets B (0 + 7 < ∞) et E (0 + 14 < ∞)
adjacents à A.On sélectionne le sommet B de poids minimal.
Le prédécesseur de B est A.
15(B) ∞ 14(A) ∞ ∞ ∞ E(14)
B de poids 7 ayant été sélectionné, on marque provisoirement
le sommet C (7 + 8 < ∞) adjacent à B.
On sélectionne le sommet E de poids minimal.
Le prédécesseur de E est A.
15(B) ∞ 33(E ) ∞ ∞ C(15)
E de poids 14 ayant été sélectionné, on marque provisoirement
le sommet F (14 + 19 < ∞) adjacent à E.
On sélectionne le sommet C de poids minimal.
Le prédécesseur de C est B.
Optimisation Janvier 2019 21 / 25
Plus court chemin Objectif
A B C D E F G H Fixés
0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ A(0)
7(A) ∞ ∞ 14(B) ∞ ∞ ∞ B(7)
15(B) ∞ 14(A) ∞ ∞ ∞ E(14)
15(B) ∞ 33(E ) ∞ ∞ C(15)
21(C) 33(E ) ∞ ∞ D(21)
C de poids 15 ayant été sélectionné, on marque provisoirement
le sommet D (15 + 6 < ∞) adjacent à C.
On sélectionne le sommet D de poids minimal.
Le prédécesseur de D est C.
33(E)
∞ ∞ F(32)
32(D)
D de poids 21 ayant été sélectionné, on marque provisoirement
le sommet F (21 + 11 < 33) adjacent à D.
On sélectionne le sommet F de poids minimal.
Le prédécesseur de F est D.
A B C D E F G H Fixés
0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ A(0)
7(A) ∞ ∞ 14(B) ∞ ∞ ∞ B(7)
15(B) ∞ 14(A) ∞ ∞ ∞ E(14)
15(B) ∞ 33(E ) ∞ ∞ C(15)
21(C) 33(E ) ∞ ∞ D(21)
33(E)
∞ ∞ F(32)
32(D)
36(F) 45(F ) G(36)
D de poids 32 ayant été sélectionné, on marque provisoirement
les sommets G (32 + 4 < ∞) et E (32 + 13 < ∞)
adjacent à F. On sélectionne le sommet G de poids minimal.
Le prédécesseur de G est F.
45(F)
H(44)
44(G)
G de poids 36 ayant été sélectionné, on marque provisoirement
le sommet H (36 + 8 < 45).
On sélectionne le sommet H de poids minimal.
Le prédécesseur de H est G.
A B C D E F G H Fixés
0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ A(0)
7(A) ∞ ∞ 14(B) ∞ ∞ ∞ B(7)
15(B) ∞ 14(A) ∞ ∞ ∞ E(14)
15(B) ∞ 33(E ) ∞ ∞ C(15)
21(C) 33(E ) ∞ ∞ D(21)
33(E)
∞ ∞ F(32)
32(D)
36(F) 45(F ) G(36)
45(F)
H(44)
44(G)
Dijkstra
L’algorithme de Dijkstra fournit les longueurs des plus courts chemins du
sommet origine aux différents sommets.
Pour déterminer le plus court chemin du sommet origine à un sommet x , il
suffit de remonter la liste des prédécesseurs en partant du sommet x .
Dijkstra
8
B C
6 5 9
7
18 8
A D G H
11 4
14
13
19
E F
Dijkstra
8
B C
∞ 6 ∞ 5 9
7
18 8
A D G H
0 ∞ 11 4 ∞ ∞
14
13
19
E F
∞ ∞
Initialisation : on attribue un poids nul au sommet A et ∞ aux autres sommets
Dijkstra
8
B C
7(A) 6 ∞ 5 9
7
18 8
A D G H
0 ∞ 11 4 ∞ ∞
14
13
19
E F
14(A) ∞
A de poids minimal est marqué, on met à jour le poids des sommets B et E
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 ∞ 11 4 ∞ ∞
14
13
19
E F
14(A) ∞
B de poids minimal est marqué, on met à jour le poids du sommet C adjacent
et non marqué
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 ∞ 11 4 ∞ ∞
14
13
19
E F
14(A) 33(E )
E de poids minimal est marqué, on met à jour le poids du sommet F adjacent
et non marqué
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 21(C ) 11 4 ∞ ∞
14
13
19
E F
14(A) 33(E )
C de poids minimal est marqué, on met à jour le poids du sommet D adjacent
et non marqué
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 21(C ) 11 4 ∞ ∞
14
13
19
E F
14(A) 32(D)
D de poids minimal est marqué, on met à jour le poids du sommet F adjacent
et non marqué
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 21(C ) 11 4 36(F ) 45(G)
14
13
19
E F
14(A) 32(D)
F de poids minimal est marqué, on met à jour le poids des sommets G et H
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 21(C ) 11 4 36(F ) 44(G)
14
13
19
E F
14(A) 32(D)
G de poids minimal est marqué, on met à jour le poids du sommet H adjacent
et non marqué
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 21(C ) 11 4 36(F ) 44(G)
14
13
19
E F
14(A) 32(D)
Sommet final H marqué : le chemin le plus court s’obtient en remontant
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 21(C ) 11 4 36(F ) 44(G)
14
13
19
E F
14(A) 32(D)
Le sommet final H étant marqué, pour lire la chaîne de poids minimal, on part
Dijkstra
8
B C
7(A) 6 15(B) 5 9
7
18 8
A D G H
0 21(C ) 11 4 36(F ) 44(G)
14
13
19
E F
14(A) 32(D)
La plus courte chaîne de A à H est : A - B - C - D - F - G - H.