Description de l'algorithme
L'algorithme de Dijkstra est un algorithme de type glouton : à chaque nouvelle étape, on traite un nouveau sommet. Reste à définir le choix du sommet à traiter, et le traitement à lui infliger, bref l'algorithme...
Tout au long du calcul, on va donc maintenir deux ensembles :
•C, l'ensemble des sommets qui restent à visiter ; au départ C=S-{source}
•D, l'ensemble des sommets pour lesquels on connaît déjà leur plus petite distance à la source ; au départ, D={source}.
L'algorithme se termine bien évidemment lorsque C est vide.
Pour chaque sommet s dans D, on conservera dans un tableau distances le poids du plus court chemin jusqu'à la source, et dans un tableau parcours le sommet p qui le précède dans un plus court chemin de la source à s. Ainsi, pour retrouver un chemin le plus court, il suffira de remonter de prédécesseur en prédécesseur jusqu'à la source, ce qui pourra se faire grâce à un unique appel récursif (beaucoup moins coûteux que dans le cas de Floyd...).
Initialisation
Au début de l'algorithme, le chemin le plus court connu entre la source et chacun des sommets est le chemin direct, avec une arête de poids infini s'il n'y a pas de liaison entre les deux sommets. On initialise donc le tableau distances par les poids des arêtes reliant la source à chacun des sommets, et le tableau parcours par source pour tous les sommets.
ième étape
On suppose avoir déjà traité i sommets, parcours et distances contiennent respectivement les poids et le prédécesseur des plus courts chemins pour chacun des sommets déjà traités.
Soit s le sommet de C réalisant le minimum de distances[s]. On supprime s de C et on l'ajoute à D. Reste à mettre à jour les tableaux distances et parcours pour les sommets t reliés directement à s par une arête comme suit : si distances[s] + F(s,t) < distances[t], alors on remplace distances[t] par distances[s] + F(s,t) et parcours[t] par s... et c'est tout !
(n-2)ème étape
Au départ, il y a (n-1) sommets à visiter, mais comme on le verra ci-après, la dernière étape est inutile puisqu'elle n'apporte rien. Ainsi, dès la (n-2)ème étape, distances et parcours contiennent toute l'information nécessaire pour trouver des plus courts chemins de la source à chacun des autres sommets (car alors D=S):
•distances[s] est le poids du plus court chemin de la source à s
•parcours[t] est le prédécesseur de s dans un plus court chemin de la source à s
Partager