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