problèmes de plus court chemin

algorithme de dijkstra

E. W. Dijkstra (1930-2002) a proposé en 1959 un algorithme qui permet de déterminer le plus court chemin entre deux sommets d'un graphe connexe pondéré (orienté ou non) dont le poids lié aux arêtes est positif ou nul.

exemple

Le graphe ci-dessous représente le réseau routier d'une région qui prend en compte le sens de la circulation, chaque arc représente une route à sens unique dont le poids est la distance en kilomètre entre deux sommets. Quel est l'itinéraire le plus court qui relie E à S ?

Graphe pondéré : l'animation flash n'est pas visible par votre navigateur.

D'après document d'accompagnement des programmes de Mathématiques - Classe terminale de la série ES

algorithme de Dijkstra

L'algorithme dû à Dijkstra est basé sur le principe suivant :

Si le plus court chemin reliant E à S passe par les sommets s1 , s2 , …, sk alors, les différentes étapes sont aussi les plus courts chemins reliant E aux différents sommets s1 , s2 , …, sk.

On construit de proche en proche le chemin cherché en choisissant à chaque itération de l'algorithme, un sommet si du graphe parmi ceux qui n'ont pas encore été traités, tel que la longueur connue provisoirement du plus court chemin allant de E à si soit la plus courte possible.

Initialisation de l'algorithme :

Étape 1 : On affecte le poids 0 au sommet origine (E) et on attribue provisoirement un poids ∞ aux autres sommets.

Répéter les opérations suivantes tant que le sommet de sortie (S) n'est pas affecté d'un poids définitif

  1. Étape 2 : Parmi les sommets dont le poids n'est pas définivement fixé choisir le sommet X de poids p minimal. Marquer définitivement ce sommet X affecté du poids p(X).

  2. Étape 3 : Pour tous les sommets Y qui ne sont pas définitivement marqués, adjacents au dernier sommet fixé X :

    • Calculer la somme s du poids de X et du poids de l'arête reliant X à Y.
    • Si la somme s est inférieure au poids provisoirement affecté au sommet Y, affecter provisoirement à Y le nouveau poids s et indiquer entre parenthèses le sommet X pour se souvenir de sa provenance.

Quand le sommet S est défintivement marqué

Le plus court chemin de E à S s'obtient en écrivant de gauche à droite le parcours en partant de la fin S.

Algorithme de Dijkstra : l'animation flash n'est pas visible par votre navigateur.

Vous pouvez observer le déroulement de l'algorithme de Dijkstra pas à pas en cliquant sur les boutons

Pour faciliter la recherche du plus court chemin il est commode de présenter les résultats dans un tableau

E A B C D F G S Sommet sélectionné et commentaires
 0 

E de poids 0 on marque les sommets adjacents A, B et C

  5 (E) 3 (E) 2(E)

C on selectionne les sommets adjacents G et F, on les marque provisoirement G(2+3) et F(2+2)

  5 (E) 3 (E)   4 (C) 5 (C)

B le sommet adjacent A est affecté d'un poids égal à 4 (3+1<5)

  4 (B)     4 (C) 5 (C)

A le sommet D va être marqué provisoirement avec un poids 6= 4+2

        6 (A) 4 (C) 5 (C)

F le sommet adjacent D sera affecté d'un poids égal à 5 (4+1<6) le sommet S va être marqué provisoirement avec un poids 10= 4+6

        5(F)   5 (C) 10 (F)

D on conservera le poids de S (5+7>10 )

            5 (C) 10 (F)

G le sommet adjacent est déjà traité

              10 (F)

S

Pour déterminer le trajet le plus court on remonte les sommets en partant de S : S vient de F qui vient de C qui vient de E.

Le plus court chemin est E-C-F-S, la distance parcourue est de 10 km.


à votre tour

Dans le graphe pondéré ci-dessous, les poids des arêtes sont déterminés de manère aléatoire. Un papier un crayon, et vérifiez vos résultats ...

Algorithme de Dijkstra : l'animation flash n'est pas visible par votre navigateur.

Vous pouvez vérifier le déroulement de l'algorithme de Dijkstra pas à pas en cliquant sur les boutons.


[ Accueil ]

L'affichage recommandé pour une meilleure lisibilité est de 1280 × 1024.

math@es

✉ A.Yallouz

Powered by MathJax