Algorithme de DIJKSTRA-MOORE Présentation de l`algorithme

Transcription

Algorithme de DIJKSTRA-MOORE Présentation de l`algorithme
Algorithme de DIJKSTRA-MOORE
Présentation de l’algorithme :
Donnons l’algorithme de DIJKSTRA (mathématicien et informaticien néerlandais
du XXe siècle), 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 Définitif 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 (+ ∞, ?) c'est-à-dire un poids indéterminé;
Phase 3 : fonctionnement
Tant que tous les sommets ne sont pas dans Définitifs, ou que le sommet F n’est pas
affecté de la plus petite distance provisoire :
- Choisir parmi les sommets non placés dans Définitifs, un dont la distance
provisoire est minimale : appelons-le S ;
- Mettre S dans la colonne des Définitifs ;
- Pour chacun des sommets i Y qui lui sont adjacents et qui ne sont pas dans
Définitifs :
•Calculer s = dist(S) + poids de l’arc [S, i Y ] ;
•Si s est inférieur à la distance provisoire de i Y , attribuer à i Y le couple (s, S);
(ainsi, dist( i Y ) := min{dist(S) + poids de l’arc [S, i Y ] , dist( i Y )})
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.
Proposition. – 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, S ne contienne bien que des
sommets dont le poids est minimal.
Soit Sr le sommet qu’on range dans S 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-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, S contient le sommet I de poids 0 qui est minimal, on a
démontré par récurrence sur r, que S contient bien que des sommets de poids
minimal. Comme l’algorithme se termine dès que F est dans S , la validité de
l’algorithme en découle.
DIJKSTRA : http://fr.wikipedia.org/wiki/Edsger_Dijkstra

Documents pareils