Vous êtes sur la page 1sur 2

Algorithme de DIJKSTRA-MOORE

(pour les graphes pondérés par des poids positifs)

Présentant de grands avantages de rapidité, cet algorithme ne permet que la recherche des chemins
de longueur minimale et pour des graphes pondérés par des poids positifs.
Donnons cet algorithme, autorisant la recherche d’un chemin minimal entre deux sommets I
(initial) et F (final). Il se décompose en quatre phases, comme suit :

Phase 1 : mise en place


- On désigne par Σ l’ensemble dans lequel on met les sommets au fur et à mesure de leur
marquage définitif ;
- A chaque sommet S, on associe le couple (dist(S), p(S)) où dist(S) désigne la distance
(provisoire ou définitive) de I à S, et p(S) le prédécesseur de S ;

Phase 2 : initialisation
- Attribuer au sommet I, le couple (0, I) ;
- Attribuer à chaque sommet adjacent à I, le couple (poids de l’arc le reliant à I, I) ;
- Attribuer aux autres sommets, le couple (+ ∞, ?) ;

Phase 3 : fonctionnement
Tant que tous les sommets ne sont pas dans Σ, ou que le sommet F n’est pas affecté de la plus
petite distance provisoire :
- Choisir parmi les sommets non placés dans Σ, un dont la distance provisoire est minimale :
appelons-le S ;
- Mettre S dans Σ ;
- Pour chacun des sommets Yi qui lui sont adjacents et qui ne sont pas dans Σ :
• Calculer s = dist(S) + poids de l’arc [S, Yi ] ;
• Si s est inférieur à la distance provisoire de Yi , attribuer à Yi le couple (s, S);
(ainsi, dist( Yi ) := min{dist(S) + poids de l’arc [S, Yi ] , dist( Yi )})

Phase 4 : conclusion
- La longueur du plus court chemin de I à F est alors dist(F) ;
- La chaîne de poids minimum se lit « à l’envers », de F à chacun de ses prédécesseurs
successifs.

Le principe est donc le suivant : on affecte provisoirement le poids maximal (+ ∞) à tous les
sommets, sauf pour le sommet initial de poids 0 et ses successeurs (recevant le poids de l’arc les
reliant à I) ; tant que c’est possible, on diminue les poids provisoires qui deviennent définitifs (un
sommet affecté d’un poids définitif est dit marqué) lorsque leur diminution devient impossible.
Remarque : il se peut que l’algorithme se termine avant que tous les sommets ne soient marqués
(cf. l’alternative du début de la phase 3) ; cela voudra dire qu’aucun des chemins passant par ces
sommets non marqués ne sera un chemin de longueur minimale.

Note – L’algorithme de DIJKSTRA-MOORE fournit un chemin minimal.


Preuve. Clairement, l’algorithme se termine en au plus n-1 itérations dans un graphe d’ordre n. Ensuite,
supposons qu’au début de l’itération r, Σ ne contienne bien que des sommets dont le poids est minimal. Soit Sr
le sommet qu’on range dans Σ lors de l’itération r et supposons que dist(Sr) ne soit pas le poids minimal de Sr
(i.e. le poids minimal du chemin de I à Sr) : dist(Sr) représente toutefois le poids d’un chemin de I à Sr, de sorte
qu’il existerait un chemin µ de poids v(µ) < dist(Sr). Soit Sh le premier sommet de S-Σ rencontré sur µ.
Désignons par µ1 le sous chemin de I à Sh et par µ2 celui de Sh à Sr. Alors on a : v(µ) = v(µ1) + v(µ2) ≥ dist(Sh)
+ 0, car v(µ1) ≥ dist(Sh) par définition de dist(Sh) et v(µ2) ≥ 0. Mais dist(Sr) > v(µ) de sorte que
dist(Sr) > dist(Sh), ce qui contredit le choix de Sr. Comme initialement, Σ contient le sommet I de poids 0 qui
est minimal, on a démontré par récurrence sur r, que Σ contient bien que des sommets de poids minimal.
Comme l’algorithme se termine dès que F est dans Σ, la validité de l’algorithme en découle.

Un exemple : cherchons dans le graphe G ci-dessous, un chemin minimal de I à F, en utilisant


l’algorithme de DIJKSTRA-MOORE, ce qui est possible les poids étant tous positifs.

I G
6 3 1
2
1 C M
5 3 5
A 12
4 H
8
4 3
1 D 9
2 N F

4 2 6
B 2 K
1
1
E 6
4 7 P

Présentons sous forme d’un tableau, le fonctionnement de l’algorithme :

I A B C D E G H K L M N P F Σ
(0,I) (1,I) (+∞, ?) (6,I) (+∞, ?) (+∞, ?) (+∞, ?) (+∞, ?) (+∞, ?) (+∞, ?) (+∞, ?) (+∞, ?) (+∞, ?) (+∞, ?) I
(2,A) (5,A) A
(4,B) B
(6,D) D
(9,C) C
(10,E) E
(11,H) (14,H) (17,H) H
(16,L) (17,L) L
(12,G) G
(24,M) M
K
(23,P) P
N
F

Dans la dernière colonne ( ∑ ), on a indiqué successivement l’entrée des sommets. Pour


retrouver un chemin minimal, on lit le tableau de droite à gauche. Le dernier sommet entré est le
sommet final F : dans la colonne F, est indiqué (toujours en dernière position) le poids définitif
attribué à F, qui est aussi la longueur minimale du chemin et qui vaut ici 23 . De plus, le
prédécesseur de F qui a contribué à donner son poids à F, est P : on lit dans la colonne P que le
prédécesseur (ayant contribué à donner son poids définitif à P) est L. Puis la colonne L va nous
donner le prédécesseur qui est E ; la colonne E nous donne ensuite D, la colonne D nous donne
B, celle de B nous donne A et celle de A nous donne I. Le chemin de longueur minimale reliant I
à F est donc : [I, A, B, D, E, L, P, F] et sa longueur est 23.
Remarque : la présence de circuits dans le graphe G interdit son partage en niveau et donc
l’utilisation de la version présentée de l’algorithme de FORD. De même, la recherche d’un
chemin de longueur maximale, n’a aucun sens.

Vous aimerez peut-être aussi