
Algorithme de Dijkstra
POUR tout sommet
;
TANT QU'il reste des sommets non fixés
choisir un sommet
;
POUR tout successeur non fixé
;
FIN SI
FIN POUR
FIN TANT QUE
Preuve de l'algorithme : l'algorithme se termine, puisqu'à chaque passage dans la boucle TANT
QUE on fixe un et un seul sommet.
On montre par récurrence qu'à toute étape de l'algorithme, pour tout sommet fixé
est le
poids minimal d'un chemin de
. Supposons en effet cette propriété vérifiée avant que l'on
ne fixe le sommet
le plus grand entier tel que
soient des sommets fixés; la façon dont
est choisi
implique que la distance
est inférieure ou égale à
, donc, a fortiori, à la
longueur du chemin
est bien le poids minimal d'un
chemin
.
Complexité : on passe exactement
fois dans la boucle TANT QUE, et on examine 1 fois
chacun des arcs (au moment où l'on fixe son origine). La détermination du sommet non fixé à
distance minimale de
peut se faire en temps constant, si l'on maintient une liste des sommets
non fixés triée par ordre croissant des
; cette liste doit être remise à jour chaque fois que l'on
change un
, ce qui peut se faire en
opérations. La complexité est ainsi
: cet algorithme est donc plus efficace que l'algorithme de Ford.
Exemple d'application de l'algorithme de Dijkstra
Soit à chercher les plus courts chemins depuis le sommet
dans le graphe suivant :
Le tableau suivant donne les distances depuis et les arcs marqués au cours des différentes étapes de
l'algorithme :
sommets A B C D E
AD
1
8
CB
E
2
5
1
6
3