Académique Documents
Professionnel Documents
Culture Documents
Graphes
Graphes
Stéphane Grandcolas
Aix-Marseille Université
2022-2023
S. Grandcolas, 2023
Graphes
Plan du cours :
I exemples, définitions,
I plus courts chemins : Dijkstra,
I plus courts chemins : Bellman-Ford,
I arbres couvrants de poids minimal (ACM) : (Prim, Kruskal),
S. Grandcolas, 2023
Graphes
s 15
17
4 t
11
3
13
c d
2
Souvent utilisés pour modéliser des problèmes
I calcul de plus courts chemins,
I calcul de flots minimaux,
I calcul d’arbres couvrants de poids minimal,
I coloriage,
I ...
S. Grandcolas, 2023
Graphe (non orienté)
Graphe G = (S, A)
I S : ensemble des sommets,
2 6 (1,2) (4,6)
3 8 (2,3) (8,4)
1 (1,3) (7,5)
(1,5) (3,5)
7 (3,7) (8,6)
4
5
S. Grandcolas, 2023
Graphe orienté
Défini par ses sommets et ses arcs
2
5
1
4 6
S. Grandcolas, 2023
Graphe pondéré
Chaque arête (resp. arc) a un poids
2 5
7 20 12
4
10
1
33 26 8 17
14 12
11
4 20
15
6 3
9 6
S. Grandcolas, 2023
Exemple : trajet le plus court entre deux villes
Grenoble
Turin
100
100
120 60
Briancon
90 105
57
183
150
Digne 170
Nice
100
100
Toulon
50
Marseille
Grenoble
Turin
100
100
120 60
Briancon
90 105
57
183
150
Digne 170
Nice
100
100
Toulon
50
Marseille
S. Grandcolas, 2023
Exemple : le choux, la chèvre et le loup
Conflits :
I loup et chèvre,
I chèvre et choux.
S. Grandcolas, 2023
Exemple : le choux, la chèvre et le loup
Cv Lp P Lp Lp P
Cv Lp
Cx Cx Cv P Cx Cv
Cx P
Cx Lp
Cx Lp P Cx Cx P
Cv P
Cv Cv Lp P Cv Lp Cx Cv Lp P
Cx Cv Lp P
Cx Cv
Cv Cv P
Lp P Cx Cv P
Cx Lp P Cx Lp
Lp
Cx Cv Lp
P
S. Grandcolas, 2023
Exemple : le choux, la chèvre et le loup
Cv Lp P Lp Lp P
Cv Lp
Cx Cx Cv P Cx Cv
Cx P
Cx Lp
Cx Lp P Cx Cx P
Cv P
Cv Cv Lp P Cv Lp Cx Cv Lp P
Cx Cv Lp P
Cx Cv
Cv Cv P
Lp P Cx Cv P
Cx Lp P Cx Lp
Lp
Cx Cv Lp
P
S. Grandcolas, 2023
Exemple : le choux, la chèvre et le loup
Cv Lp P Lp
Cx Cx Cv P
Cx Lp
Cx Lp P Cx
Cv P
Cv Cv Lp P Cx Cv Lp P
Cx Cv Lp P
Cv Cv P
Cx Cv P
Cx Lp P Cx Lp
Lp
S. Grandcolas, 2023
Exemple : le choux, la chèvre et le loup
Cv Lp P Lp
Cx Cx Cv P
Cx Lp
Cx Lp P Cx
Cv P
Cv Cv Lp P Cx Cv Lp P
Cx Cv Lp P
Cv Cv P
Cx Cv P
Cx Lp P Cx Lp
Lp
S. Grandcolas, 2023
Exemple : problème des tours de Hanoï
S. Grandcolas, 2023
Exemple : problème des tours de Hanoï
S. Grandcolas, 2023
Exemple : problème des tours de Hanoï.
S. Grandcolas, 2023
Exemple : problème des tours de Hanoï
Un plus court chemin entre l’état initial et l’objectif représente une plus
courte séquence de mouvements pour déplacer les disques (il faut 2n − 1
mouvements).
S. Grandcolas, 2023
Graphes : vocabulaire
voisinage
cycles
arbre
chemin
graphe connexe
circuit
plus court chemin
composantes connexes
graphe complet
S. Grandcolas, 2023
Graphes : voisinage
1
1 1
a b a b
12 4 12 12 4 12
s 15
17
4 t s 15 4 t
17 11
11
3 3
13 13 1
c d c d
2
V oisins(u) = {v ∈ S|(u, v) ∈ A}
Les voisins de u sont les sommets v tels que le graphe contient l’arête
(u, v) (resp. l’arc (u, v)).
S. Grandcolas, 2023
Graphes : chemins
1
1 1
a b a b
12 4 12 12 4 12
s 15
17
4 t s 15 4 t
17 11
11
3 3
13 13 1
c d c d
2
S. Grandcolas, 2023
Graphes : chemins
1
1 1
a b a b
12 4 12 12 4 12
s 15
17
4 t s 15 4 t
17 11
11
3 3
13 13 1
c d c d
2
S. Grandcolas, 2023
Graphes : cycles, circuits
1
1 1
a b a b
12 4 12 12 4 12
s 15
17
4 t s 15 4 t
17 11
11
3 3
13 13 1
c d c d
2
Cycle : (u1 , u2 , . . . , uk )
avec (u1 , u2 ), (u2 , u3 ), . . . , (uk , u1 ) ∈ A.
S. Grandcolas, 2023
Graphe connexe
v u p x
h y z
g f
a b w
q e t
c d
S. Grandcolas, 2023
Graphe non connexe
v u p x
h y z
g f
a b w
q e t
c d
S. Grandcolas, 2023
Arbre
u p
v x
g f h
a b w y
q e t z
c d
n sommets ⇒ n − 1 arêtes
S. Grandcolas, 2023
Graphe complet
a b
s t
c d
(n − 1) + (n − 2) + . . . + 1 = n × (n − 1)/2 arêtes
S. Grandcolas, 2023
Clique
a b
s t
c d
S. Grandcolas, 2023
Représentation
I listes d’adjacences,
I matrice d’adjacence,
I liste des arêtes (ou arcs).
Dans ce qui suit les sommets sont numérotés de 1 à n. Lors de la mise en oeuvre
(dans un programme C, Java,...) on utilisera la numérotation 0, . . . , n − 1
correspondant à l’indexation standard dans un tableau.
S. Grandcolas, 2023
Représentation par des listes d’adjacence
Voisins
2 (1, 2) (1, 3)
1
3
4 (4, 1)
5 (5, 2) (5, 3)
4
S. Grandcolas, 2023
Représentation avec des matrices d’adjacence
M
2 1 2 3 4 5
1 F V V F F
1 5 2 V F V V V
3 V V F V F
3 4 F V V F F
4 5 F V F F F
(
V si le graphe contient l0 arête (i, j)
Mij =
F sinon
19 2 22 1 2 3 4 5
1 0 19 7 ∞ ∞
1 5 2 19 0 5 14 22
5
7 3 7 5 0 12 ∞
14
3 4 ∞ 14 12 0 ∞
4 5 ∞ 22 ∞ ∞ 0
12
S. Grandcolas, 2023
Plus courts chemins
Notation :
δ(u, v)
la longueur du plus court chemin de u à v.
S. Grandcolas, 2023
Plus courts chemins
δ(s, u)
u
s
v
δ(s, v)
S. Grandcolas, 2023
Plus courts chemins
Propriété 2. Soit (v1 , . . . , vk ) un plus court chemin,
vi vj
v1
vk
S. Grandcolas, 2023
Algorithme de Dijkstra.
S. Grandcolas, 2023
Algorithme de Dijkstra.
Notations.
I s : source.
I d[u] : distance, indexée sur les sommets. A tout moment
∀u ∈ S, d[u] ≥ δ(s, u)
S. Grandcolas, 2023
Algorithme de Dijkstra.
I Initialement
∀u ∈ S, u 6= s, d[u] = ∞,
d[s] = 0. (longueur du PCC de s à s)
S. Grandcolas, 2023
Algorithme de Dijkstra : opération de relachement.
Si d[v] > d[u] + w(u, v) alors on remplace d[v] par d[u] + w(u, v)
d[u] = 5 u
w(u, v) = 2
s
v
d[v] = 9
S. Grandcolas, 2023
Algorithme de Dijkstra.
File de priorité F
18 F
source
c 12 g
b
7
s d
22
f
11 a
e
plus courts chemins
S. Grandcolas, 2023
Algorithme de Dijkstra.
18 F
source
c 12 g
b
7
s d
22
f
11 a
e
plus courts chemins
Itération :
I extraction d’un sommet u de F de distance d[u] minimale,
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
inf 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
inf inf
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
inf 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
inf inf
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
inf 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
inf inf
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
12 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 inf
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
12 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 inf
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
12 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 inf
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
12 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 inf
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
10 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
10 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
10 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
10 1 inf
source
u t 2
3
5
inf
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 13
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 13
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 13
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 13
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
16
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
10
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
10
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
10
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Plus courts chemins : Dijkstra.
7 1 8
source
u t 2
3
5
10
0 12 9
s 8 4 10 w
2
1 13
7 x v
2 3
S. Grandcolas, 2023
Algorithme de Dijkstra.
algorithme PCC-DIJKSTRA(G, s)
in : G = (S, A, w) un graphe pondéré, s un sommet de G
(F une file de priorité)
1 F := S, {i.e. initialement F contient tous les sommets}
2 pour chaque sommet u ∈ S faire
3 d[u] := ∞,
4 d[s] := 0, (pred[s] :=NONE)
5 tant que F 6= ∅ faire
6 u :=EXTRAIRE_LE_MIN(F, d),
7 pour chaque arc (u, v) ∈ A faire
8 si d[v] > d[u] + w(u, v) alors
9 d[v] = d[u] + w(u, v), (pred[v] := u)
10 fin pour,
11 fin tant que,
12 renvoyer d, (et pred[])
S. Grandcolas, 2023
Algorithme de Dijkstra.
algorithme PCC-DIJKSTRA(G, s)
in : G = (S, A, w) un graphe pondéré, s un sommet de G
(n le nombre de sommets, m le nombre d’arcs)
1 F := S, O(n)
2 pour chaque sommet u ∈ S faire
3 d[u] := ∞, O(n)
4 d[s] := 0,
5 tant que F 6= ∅ faire
6 u :=EXTRAIRE_LE_MIN(F, d), n × O(n)
7 pour chaque arc (u, v) ∈ A faire
8 si d[v] > d[u] + w(u, v) alors m fois
9 d[v] = d[u] + w(u, v), (m : nombre d’arêtes)
10 fin pour,
11 fin tant que,
12 renvoyer d, F : tableau contenant des sommets
EXTRAIRE_LE_MIN(F ) : parcours du tableau
Coût total : O(n2 )
S. Grandcolas, 2023
Algorithme de Dijkstra.
0 1 2 3 4 5 6 7 8 9 10
F 6 8 10 3 7 2 4 1 9 5 0
7 sommets
0 1 2 3 4 5 6 7 8 9 10
d 0 4 18 11 9 2 14 6 23 4 14
S. Grandcolas, 2023
Algorithme de Dijkstra.
0 1 2 3 4 5 6 7 8 9 10
F 6 8 10 3 7 2 4 1 9 5 0
7 sommets
0 1 2 3 4 5 6 7 8 9 10
d 0 4 18 11 9 2 14 6 23 4 14
S. Grandcolas, 2023
Algorithme de Dijkstra.
0 1 2 3 4 5 6 7 8 9 10
F 6 8 10 3 7 2 4 1 9 5 0
7 sommets
0 1 2 3 4 5 6 7 8 9 10
d 0 4 18 11 9 2 14 6 23 4 14
On extrait de F le sommet 7.
S. Grandcolas, 2023
Algorithme de Dijkstra.
0 1 2 3 4 5 6 7 8 9 10
F 6 8 10 3 4 2 7 1 9 5 0
6 sommets
0 1 2 3 4 5 6 7 8 9 10
d 0 4 18 11 9 2 14 6 23 4 14
S. Grandcolas, 2023
Algorithme de Dijkstra.
algorithme PCC-DIJKSTRA(G, s)
in : G = (S, A, w) un graphe pondéré, s un sommet de G
(n le nombre de sommets, m le nombre d’arcs)
1 F := S, O(n)
2 pour chaque sommet u ∈ S faire
3 d[u] := ∞, O(n)
4 d[s] := 0,
5 tant que F 6= ∅ faire
6 u :=EXTRAIRE_LE_MIN(F, d), n × O(log n)
7 pour chaque arc (u, v) ∈ A faire
8 si d[v] > d[u] + w(u, v) alors
9 d[v] = d[u] + w(u, v), m × O(log n)
9 DIMINUER_LA_CLE(v, d[v], F ), m × O(log n)
10 fin pour,
11 fin tant que,
12 renvoyer d, F : tas binaire.
Extraire le min, diminuer la clé : O(log n).
Coût total : O(m × log n)
S. Grandcolas, 2023
Algorithme de Dijkstra : complexité
S. Grandcolas, 2023
Algorithme de Dijkstra : preuve.
F
u
S. Grandcolas, 2023
Algorithme de Dijkstra : preuve.
F
u
s
y
x
S. Grandcolas, 2023
Algorithme de Dijkstra : preuve.
F
u
s
y
x
S. Grandcolas, 2023
Algorithme de Dijkstra : preuve.
F
u
s
y
x
S. Grandcolas, 2023
Algorithme de Dijkstra : preuve.
F
u
s
y
x
S. Grandcolas, 2023
Algorithme de Dijkstra : preuve.
F
u
s
y
x
S. Grandcolas, 2023
Algorithme de Dijkstra : preuve.
F
u
s
y
x
donc d[u] ≤ δ(s, u) ce qui contredit l’hypothèse d[u] > δ(s, u).
S. Grandcolas, 2023