Académique Documents
Professionnel Documents
Culture Documents
Chapitre 4
Algorithmes de plus courts chemins
4.1 Problèmatique
Ce chapitre sera consacrer à l'une des thématiques les plus importantes de la théorie des graphes,
celle de la recherche d'un plus court chemin entre deux sommets.
Après avoir défini précisément le contexte, nous étudierons successivement les algorithmes de
Dijkstra et Bellman-Ford.
Nous allons travailler sur un graphe sans boucle G=(V , E , l ) avec l l’application poids
(E ⇒ ℝ) . L’application l associe à chaque arc/arête, un réel appelé longueur/coût de l’arc.
n
l( π)=∑i=0 l ( x i , x i+1)
Définition – Plus court chemin
Soient x et y deux sommets de V. Dans la recherche d’un plus court chemin de x à y, trois cas
peuvent se présenter :
1. Il n’existe aucun chemin de x à y (si x et y appartiennent à deux composantes connexes
différentes de G).
2. Il existe un chemin de x à y mais pas de plus court chemin( Il n’existe pas de plus court
chemin de x à y. C’est à dire que pour tout chemin π de x à y, on peut trouver un chemin
π 0 tel que l( π 0)<l ( π) . (Circuit absorbant)
3. Il existe un plus court chemin de x à y.
Exemple
Dans l’exemple, le cycle acba est un cycle absorbant donc entre x et y il n’ y a pas de chemin plus
court :
xacby → est une chaîne de coût total égale à 2 ( 3+(-7)+2+4)
xacbacby → est une chaîne de coût total égale à 0 (3+(-7)+2+3+(-7)+2+4)
xacbacbacby → est une chaîne de coût total égale à -2 (3+(-7)+2+3+(-7)+2+3+(-7)+2+4)
… En trouvera toujours un chemin plus que l’ancien !
l (s )=0
l (i)=l (s ,i ) si i∈ Γ (s)
=∞ sinon
Phase B : Sélection
sélectionner un sommet j ∈T tel que l ( j )=mini ∈ T (l(i ))
T =T −{ j }
S=S+{ j }
Phase C : Calcul des distances
Pour tout i ∈ T voisin de j ( i∈ Γ ( j ) )
l(i)=min(l(i ), l ( j)+l ( j , i))
si l (i) est modifiée alors P(i)= j
Fin Pour
======================================================================
Exemple 1
On prend comme sommet de départ le sommet S. Ci-
après la trace de l’algorithme de Dijkstra sur le graphe G
avec comme sommet de départ le sommet S.
l=(2,1,6 ,∞ ,0) (avec l’ordre A,B,C,D et S)
(car l ( S)=0, l ( A)=2 , l (B)=1, l (C)=6,l ( D)=∞)
P=(S , S , S , Null ,0)
S={S } et T ={ A , B ,C , D }
Étape 1
→ Phase B
j=B car l(B)=min(2,1,6 , ∞)=1
→ Phase C
les voisins de B dans T sont A et C :
pour i=A
l( A )=min( l( A) , l (B)+l ( B , A ))=min(2,1+1)=2 Donc la valeur de l ( A ) reste inchangée et
donc on ne change pas aussi la valeur de P( A) . → Aucun changement
pour i=C
l (C)=min(l (C) ,l ( B)+l ( B ,C ))=min(2,1+1)=2 puisque la valeur de l(C) est changée alors
P(C) devient B ( P(C)=B )
Donc l=(2,1,2, ∞ ,0) et P=(S , S , B , Null ,0) S={S , B } et T ={ A , C , D }
Étape 2
min(2,2 , ∞)=2 donc ici on a le choix entre les deux sommet A et C. par convention on va choisir
l’ordre alphabétique :
j= A . Les voisins de A dans T ={ A , C , D } sont C et D :
pour i=C
l (C)=min(l (C) ,l ( A)+l ( A ,C))=min (2,2+ 2)=2 Donc la valeur de l(C) reste inchangée et
donc on ne change pas aussi la valeur de P(C) . → Aucun changement
pour i=D
l ( D)=min(l (D) ,l( A)+l( A , D))=min(∞ ,2+1)=3 Donc l ( D)=3 et P( D)= A
Etape 3
j=C car l(C)=min(2,3)=2 . le seul voisin de C dans T ={C , D } est D :
pour i=D
l ( D)=min(l (D) ,l(C )+ l(C , D))=min(3,2+7)=3 Donc la valeur de l( D ) reste inchangée et
donc on ne change pas aussi la valeur de P( D ) . → Aucun changement
Étape 4
j=D puisque il n’ y a pas de voisin de D dans T ={D } Alors pas de changement dans cette étape.
FIN de l’algorithme
Résultats :
Sommets A B C D S
L : longueur 2 1 2 3 0
P : Prédécesseur S S B A -
Interprétation :
P(A)=S donc le chemin la plus courte est S→ A avec le coût 2 .
P(B)=S donc le chemin la plus courte est S→ B avec le coût 1 .
P(C)=B et P(B)=S donc le chemin la plus courte est S→ B→C avec le coût 2 .
P(D)=A et P(A)=S donc le chemin la plus courte est S→ A→D avec le coût 3 .
Correction
Sommets A B C D E F
L 0 5 1 8 3 6
P - E A E C B
Exemple 3
Considérons le graphe orienté valué suivant :
On sait que l’algorithme de Dijkstra ne donnera pas un
résultat optimal car le coût de l’arc (C,B) est négatif (-5).
Le résultat de l’algorithme Dijkstra sur ce graphe avec A
comme sommet de départ est :
Sommets A B C D
L 0 1 2 3
P - A A B
Le chemin (A,C,B,D) a une valuation égale à −1, ce qui est mieux que la valeur 3 retournée par
l'algorithme de Dijkstra.
Pour avoir un résultat optimal dans le cas des graphes à valuations négatives (et aussi positives)
nous allons utiliser l’algorithme de Bellman-Ford.