Vous êtes sur la page 1sur 29

Université Blida 1

Faculté des Sciences


Département d’Informatique
Master IL (Ingénierie Logiciel) & SIR (Systèmes
Informatiques et Réseaux)
Semestre 1

CHAPITRE II:
PROBLÈME DU PLUS COURT
CHEMIN

Mme AROUSSI (s_aroussi@esi.dz)

2018-2019

Disponible sur https://sites.google.com/a/esi.dz/informatiqueblida/


PLAN DU CHAPITRE II

Introduction

Définition

Conditions (Optimalité/ Nécessaire)

Algorithmes de Résolution
Algorithme de DIJKSTRA

Algorithme de BELLMAN

Algorithme de FORD
2
Algorithme de FLOYD
INTRODUCTION

Le problème du Plus Court Chemin (PCC)

compte parmi les problèmes le plus classiques

de la théorie des graphes et les plus importants

dans leurs applications (les problèmes

d'optimisation de réseaux routiers ou

télécommunications, les problèmes de tournées,


3

….)
DÉFINITION
Ce problème du Plus Court Chemin (PCC) peut être posé
de la façon suivante:

Etant donné un graphe orienté valué G (X,U,L), on


associe à chaque arc u(i,j) un nombre réel l(u) ou lij,
appelé la longueur ou le poids de l’arc, le PCC entre
deux sommets s (source ou origine) et d (destination)
du graphe consiste à déterminer, parmi tous les
chemins allant de s à d, un chemin, noté u*, dont la
longueur totale l(u*) = soit minimale
4
INTRODUCTION
Condition Nécessaire: Le problème du plus court

chemin a une solution si et seulement s’il n'existe pas

dans le graphe de circuit de longueur strictement

négative pouvant être atteint à partir de l’origine (s).

Un circuit négatif est appelé circuit absorbant


10 -5
a b c

-1
2
-3
5
f e d
-3 5
INTRODUCTION
Condition d’Optimalité: Les sous-chemins des plus

courts chemins sont des plus courts chemins.


6
b c
3 Exemples des arborescences des
2 4 plus courts chemins dont l’origine
a 1 2 7
5
est a
3 e d
6

6
b c b c
3 3
4
a a 2 2
5 6

e d e d
6
ALGORITHMES DE RÉSOLUTION
Selon les propriétés du graphe traité (orienté/non

orienté, avec/sans circuit ou longueurs

positives/quelconques) et selon le problème considéré

(recherche du plus court chemin d'un sommet vers

tous les autres, ou entre tous les couples de

sommets), il existe de nombreux algorithmes

permettant l'obtention d'une solution.


7
ALGORITHMES DE RÉSOLUTION
Algorithmes Type du Propriétés du graphe
PCC

Type de graphe Longueur

Dijkstra D’un Graphe orienté (et non Positive


sommet à orienté)
tous les
Bellman Graphe orienté sans Quelconque :
autres
circuit (sommet Positive et/ou
sommets
d’origine doit être sans Négative
prédécesseur)
Ford Graphe orienté

Floyd Entre tous Graphe orienté


les 8
couples de
sommets
ALGORITHME DE DIJKSTRA
Cet algorithme permet de calculer le PCC d’un sommet «

s » à un sommet « d » ou d’un sommet « s » à tous les

autres sommets dans un graphe de longueur positive.

Soit π(i) la valeur de chemin du sommet « s » vers le

sommet « i », ainsi, initialement : π(s) = 0 et π(x) = ∞

pour tout sommet x ≠s

Soit M l’ensemble des sommets marqués, initialement

il est vide (M = φ ) 9
ALGORITHME DE DIJKSTRA
Tant qu’il existe un sommet non marqué (M≠X) ou on

n’a pas arrivé au sommet destinataire (x ≠ d) faire:

1. Choisir un sommet non marqué, soit x (x∈X-M),

ayant le plus petit π [π(x) = min {π(y) tq y∈X-M}]

2. Mettre à jour ses successeurs non encore marqués

comme suit: π(y) = min (π(y), π(x)+lxy) tel que y∈ Γ+ (x) ∩ (X-

M)
10

3. Marquer le sommet x [M = M ∪ {x}]


ALGORITHME DE DIJKSTRA
Exemple: Trouver PCC de a vers tous les autres sommets
6
b c
3

2 4
a 1 2 7
5

3 e d
6

π(a) π(b) π(c) π(d) π(e)


0 (init) 0 ∞ ∞ ∞ ∞
1 0 (*) 3 5
2 3(*) 9 5
3 9 11 5 (*)
4 9(*)
11
5 11(*)
6 (fin) 0 3 9 11 5
ALGORITHME DE DIJKSTRA
Exemple: Trouver PCC de a vers tous les autres sommets

3 9
6
b c
3

2 4
0 a 1 2 7
5

3 e d
6
5 11

Comment trouver le PCC chemin de a vers (b, e, c ou d)?

12
Pour chaque couple de sommet (i, j), on garde l’arc vérifiant la

relation suivante: u(i,j) = π(j) - π (i).


ALGORITHME DE DIJKSTRA
Exemple: Trouver PCC de a vers tous les autres sommets

On peut trouver plusieurs arborescences:


3 9
6
b c
3

a
5
0
e d 3 9
6
5 11 b c
3
4
a 2 2
0 13
e d

5 11
ALGORITHME DE BELLMAN
Cet algorithme permet de calculer le PCC d’un sommet «
s » à un sommet « d » ou d’un sommet « s » à tous les
autres sommets dans un graphe orienté sans circuit de
longueur quelconque.
Soit π(i) la valeur de chemin du sommet sans prédécesseur
« s » vers le sommet « i », ainsi, initialement : π(s) = 0 et π(x) =
∞ pour tout sommet x ≠s

Soit M l’ensemble des sommets marqués, initialement il


contient « s » (M = {s} )

Soit Z l’ensemble des sommets ayant au moins un


14

prédécesseur. Il contient aussi « s » Z = Z ∪ {s}


ALGORITHME DE BELLMAN
Tant qu’il existe un sommet non marqué (M≠Z) ou on

n’a pas arrivé au sommet destinataire (x ≠ d) faire:

1. Choisir un sommet non marqué, soit x (x∈Z-M), dont

tous les prédécesseurs sont marqués [Γ-(x) ⊂ M]

2. Mettre à jour son poids π comme suit: π(x) = min

(π(y)+lyx) tel que y∈ Γ-(x)

3. Marquer le sommet x [M = M ∪ {x}] 15


ALGORITHME DE BELLMAN
Exemple: Trouver PCC de a vers tous les autres sommets
2
a b π(a) π(b) π(c) π(d)
7 0 (init) 0 (*) - - -
10 3
1 2 (*)
2 9(*)
c d
-6 3 3(*)
fin 0 2 9 3

0 2
2
a b

16
c d
-6
9 3
ALGORITHME DE FORD
Cet algorithme permet de calculer le PCC d’un sommet «
s » à tous les autres sommets dans un graphe orienté de
longueur quelconque et aussi de détecter la présence d’un
circuit absorbant.

Soit λk(i) la valeur de chemin du sommet « s » vers le


sommet « i » ne contenant pas plus de k arcs, ainsi,
initialement : k = 0; λk (s) = 0 et λk(x) = ∞ pour x ≠s

Soit M l’ensemble des sommets dont le poids λk (s) a


été modifié à l’itération k, initialement il contient « s »
17
(M = {s} )
ALGORITHME DE FORD
Tant qu’il existe un sommet marqué (M≠φ) et k est

inférieur ou égale à n (n présente le nombre des

sommets |X|) faire:

1. Incrémenter k

2. Initialiser l’ensemble NM à vide (NM contiendra les

sommet dont la marque λk sera modifiée)

18
ALGORITHME DE FORD
3. Pour tout sommet x de Γ+(M) (i.e les successeurs des

sommets dont la marque a été modifié au cours de

l’itération k-1) faire:

a) Mettre à jour sa marque : λk (x) = min (λk-1 (x), λk

-1(y) +lyx) tel que y∈ Γ- (x) ∩ M

b) Si sa marque a été modifiée (λk (x) < λk-1 (x) ) alors

ajouter x à l’ensemble NM (NM = NM ∪ {x})


19

4. Remplacer M par MN
ALGORITHME DE FORD
En absence de circuit absorbant dans le graphe,

l’algorithme se termine nécessairement à l’issue de

l’itération n (k = n) car, au pire des cas, le PCC de s

vers tous les autre sommets est un chemin élémentaire

possédant (n-1) arcs.

Si une ou plusieurs marques sont modifiées à l’itération

n (Γ+(M) ≠φ), cela signifie qu’il existe un circuit


20

absorbant.
ALGORITHME DE FORD
Exemple 1: Trouver PCC de a vers tous les autres sommets
6
b c
3

2 4
a 1 2 7
5

3 e d
6

k λk (a) λk (b) λk (c) λk (d) λk (e)


0 (init) 0 (*) ∞ ∞ ∞ ∞
1 0 3(*) 5(*)
2 9(*) 11(*) 5
3 (fin) 0 3 9 11 5
4 21
ALGORITHME DE FORD
Exemple 2: Trouver PCC de a vers tous les autres sommets
10 -5
a b c

-1
2
-3
f e d
-3 5

k λk (a) λk (b) λk (c) λk (d) λk (e) λk (f)


0 (init) 0 (*) ∞ ∞ ∞ ∞ ∞
1 10(*) 2(*)
2 5(*) 7(*) -1(*)
3 -4(*) 6(*)
4 1(*) -2(*)
22
5 3(*) -5(*)
6 -8(*) 2(*)
ALGORITHME DE FLOYD
Cet algorithme permet de calculer le PCC entre tous les
couples de sommets dans un graphe orienté de longueur
quelconque et aussi de détecter la présence d’un circuit
absorbant.
Numéroter les sommets de 1 à n (|X| = n)

Soit la matrice A = {aij} de taille n x n définie initialement comme


suit:

23
ALGORITHME DE FLOYD
Cet algorithme permet de calculer le PCC de la façon

suivante:

A la première itération, on cherche le PCC entre

chaque couple (i, j) passant éventuellement par le

sommet 1 ;

A l'itération k (avec k > 1), on cherche le PCC entre

chaque couple (i, j) passant par des sommets d'indice


24

inférieur ou égal à k.
ALGORITHME DE FLOYD
Cet algorithme permet de calculer le PCC de la façon

suivante:

A l'itération n, la matrice An présente les valeurs du

PCC entre chaque couple (i, j).

S’il n’y a pas de circuit absorbant, ces valeurs sont


correctes.

S’il y a des circuits absorbants (de valeur négative),


ils sont détectés, puisque pour chaque sommet25x
appartenant à un tel circuit, on aura A[x,x]<0.
ALGORITHME DE FLOYD
Voici une description formelle de l'algorithme :

Pour tout sommet k (k allant de 1 à n)

Pour tout couple de sommet (i, j) calculer

j k

k
26
ALGORITHME DE FLOYD
Exemple: Trouver PCC entre tous les couples des sommets

2
a b
-1
6 -4 5 -2

c d
5

27
ALGORITHME DE FLOYD
Exemple: Trouver PCC entre tous les couples des sommets

2
a b
-1
6 -4 5 -2

c d
5

a 2 b a b a 2 b 2
a b

-2 -4 -2 -4 -2 -4
c d c d c d
5 c d 5
5
28
SOURCES DE CE COURS
Lucas Letocart, Cours d’Algorithmique de graphes, Institut Galilée,
Université Paris 13, Disponible sur www-galilee.univ-
paris13.fr/fichiers/Cours_Algo_Graphes.pdf

Laurent Canet, Algorithmique, graphes et programmation dynamique,


Notes de Cours & Rapport de Travaux Pratiques, 2003

Sana Aroussi, Notes des Travaux Dirigés de Recherche Opérationnelle,


Ecole nationale Supérieure d’Informatique (ESI), 2013.

Laurent Godefroy, Cours Théorie du graphe, Chapitre 03 - Algorithmes de


plus courts chemins, Université Internationale SUPINFO, disponible sur
https://www.supinfo.com/cours/2GRA/chapitres/03-algorithmes-plus-courts-
chemins#idm46133009494944
29
Jean-Michel Hélary, Le plus court chemin, 2005, Disponible sur
https://interstices.info/le-plus-court-chemin/