Graphes orientés T ES - 2011-2012 Pascal Blondet [email protected] juin 2011 Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 1 / 18 Graphes orientés T ES - 2011-2012 1 Algorithme de Dijkstra Algorithme appliqué sur le graphe Algorithme présenté dans un tableau Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 2 / 18 Algorithme de Dijkstra Algorithme de recherche d’une plus courte chaı̂ne d’un graphe pondéré. On cherche à déterminer le plus court chemin entre le sommet de départ D et le sommet d’arrivée G . 35 A 3 D F 13 8 5 C 9 12 B Pascal Blondet ([email protected]) G 10 15 Graphes orientés T ES - 2011-2012 14 E juin 2011 3 / 18 Algorithme de Dijkstra sur le graphe Etape initiale On marque : A 3 D b 5 b 8 b 12 9 b B Pascal Blondet ([email protected]) F 35 b 13 C b 10 G 14 15 b E Graphes orientés T ES - 2011-2012 juin 2011 4 / 18 Algorithme de Dijkstra sur le graphe Etape initiale On marque : • le sommet de départ avec un poids nul : D, 0. On dit que le sommet D est fixé. A 3 D, 0 b 5 b 8 b 12 9 b B Pascal Blondet ([email protected]) F 35 b 13 C b 10 G 14 15 b E Graphes orientés T ES - 2011-2012 juin 2011 4 / 18 Algorithme de Dijkstra sur le graphe Etape initiale On marque : • les sommets adjacents avec leurs poids et le sommet de provenance : A, 3, D et B, 12, D. A, 3, D 3 D, 0 5 b 9 13 C, ∞ 10 b B, 12, D G, ∞ 14 15 b Pascal Blondet ([email protected]) b 8 b 12 F, ∞ 35 b b E, ∞ Graphes orientés T ES - 2011-2012 juin 2011 4 / 18 Algorithme de Dijkstra sur le graphe Etape initiale On marque : A, 3, D 3 D, 0 5 b 9 b b 8 b 12 F, ∞ 35 b 13 C, ∞ 10 15 b G, ∞ 14 b E, ∞ B, 12, D Quand tous les sommets sont fixés l’algorithme s’arrête. Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 4 / 18 Algorithme de Dijkstra sur le graphe Première itération On applique les opérations suivantes : A, 3, D D, 0 3 5 12 9 b b 8 b 13 C, ∞ 10 b G, ∞ 14 15 b B, 12, D Pascal Blondet ([email protected]) F, ∞ 35 b b E, ∞ Graphes orientés T ES - 2011-2012 juin 2011 5 / 18 Algorithme de Dijkstra sur le graphe Première itération On applique les opérations suivantes : • On fixe le sommet de plus petit poids en précisant le sommet de provenance : A, 3, D A, 3, D D, 0 3 5 12 9 b b 8 b 13 C, ∞ 10 b G, ∞ 14 15 b B, 12, D Pascal Blondet ([email protected]) F, ∞ 35 b b E, ∞ Graphes orientés T ES - 2011-2012 juin 2011 5 / 18 Algorithme de Dijkstra sur le graphe Première itération On applique les opérations suivantes : • On marque les sommets adjacents non fixés avec la somme des poids parcourus et le sommet de provenance : F , 38, A et C , 8, A. A, 3, D D, 0 3 5 12 9 b b b 8 13 C , 8, A 10 14 15 b B, 12, D Pascal Blondet ([email protected]) F , 38, A 35 b b G, ∞ b E, ∞ Graphes orientés T ES - 2011-2012 juin 2011 5 / 18 Algorithme de Dijkstra sur le graphe Deuxième itération On réitère les mêmes opérations : A, 3, D D, 0 3 5 12 9 b b b 8 13 C , 8, A 10 14 15 b B, 12, D Pascal Blondet ([email protected]) F , 38, A 35 b b G, ∞ b E, ∞ Graphes orientés T ES - 2011-2012 juin 2011 6 / 18 Algorithme de Dijkstra sur le graphe Deuxième itération On réitère les mêmes opérations : • On fixe le sommet de plus petit poids en précisant le sommet de provenance : C , 8, D A, 3, D D, 0 3 5 12 9 b b b 8 13 C , 8, A 10 14 15 b B, 12, D Pascal Blondet ([email protected]) F , 38, A 35 b b G, ∞ b E, ∞ Graphes orientés T ES - 2011-2012 juin 2011 6 / 18 Algorithme de Dijkstra sur le graphe Deuxième itération On réitère les mêmes opérations : • On marque les sommets adjacents non fixés avec la somme des poids parcourus et le sommet de provenance : F , 16, C et E , 18, C . A, 3, D 35 b D, 0 3 5 12 9 b b b 8 13 C , 8, A 10 14 15 b B, 12, D Pascal Blondet ([email protected]) F , 16, C F , 38, A b G, ∞ b E , 18, C Graphes orientés T ES - 2011-2012 juin 2011 6 / 18 Algorithme de Dijkstra sur le graphe Deuxième itération On réitère les mêmes opérations : • Si une marque précédente a un poids supérieur à une nouvelle marque obtenue, on barre l’ancienne marque. A, 3, D 35 b D, 0 3 5 12 9 b b b 8 13 C , 8, A 10 14 15 b B, 12, D Pascal Blondet ([email protected]) F , 16, C F , 38, A b G, ∞ b E , 18, C Graphes orientés T ES - 2011-2012 juin 2011 6 / 18 Algorithme de Dijkstra sur le graphe Troisième itération A, 3, D 35 b 3 D, 0 5 b 9 13 C , 8, A 10 15 b B, 12, D Pascal Blondet ([email protected]) b 8 b 12 F , 16, C F , 38, A b G, ∞ 14 b E , 18, C Graphes orientés T ES - 2011-2012 juin 2011 7 / 18 Algorithme de Dijkstra sur le graphe Troisième itération • le sommet de plus petit poids est : B, 12, D A, 3, D 35 b 3 D, 0 5 b 9 13 C , 8, A 10 15 b B, 12, D Pascal Blondet ([email protected]) b 8 b 12 F , 16, C F , 38, A b G, ∞ 14 b E , 18, C Graphes orientés T ES - 2011-2012 juin 2011 7 / 18 Algorithme de Dijkstra sur le graphe Troisième itération • Le seul sommet adjacent non fixé est : E , 27, B. A, 3, D 35 b 3 D, 0 5 b 9 13 C , 8, A 10 15 b B, 12, D Pascal Blondet ([email protected]) b 8 b 12 F , 16, C F , 38, A b G, ∞ 14 b E , 18, C E , 27, B Graphes orientés T ES - 2011-2012 juin 2011 7 / 18 Algorithme de Dijkstra sur le graphe Troisième itération • La nouvelle marque obtenue a un poids supérieur à la marque précédente E , 18, C . On laisse donc la précédente marque. A, 3, D 35 b 3 D, 0 5 b 9 13 C , 8, A 10 15 b B, 12, D Pascal Blondet ([email protected]) b 8 b 12 F , 16, C F , 38, A b G, ∞ 14 b E , 18, C E , 27, B Graphes orientés T ES - 2011-2012 juin 2011 7 / 18 Algorithme de Dijkstra sur le graphe Quatrième itération • le sommet de plus petit poids est : F , 16, C • Il y a un seul sommet adjacent non marqué (donc non fixé) : G , 29, F . A, 3, D 35 b 3 D, 0 5 b 9 13 C , 8, A 10 15 b B, 12, D Pascal Blondet ([email protected]) b 8 b 12 F , 16, C F , 38, A b 14 b E , 18, C E , 27, B Graphes orientés T ES - 2011-2012 juin 2011 8 / 18 Algorithme de Dijkstra sur le graphe Cinquième itération • le sommet de plus petit poids est : E , 18, C • Il y a un seul sommet adjacent non fixé : G , 32, E . • La nouvelle marque obtenue a un poids supérieur à la marque précédente G , 29, F . On laisse donc la précédente marque. A, 3, D 35 b 3 D, 0 5 b 9 13 C , 8, A 10 15 b B, 12, D Pascal Blondet ([email protected]) b 8 b 12 F , 16, C F , 38, A b 14 G , 29, F G , 32, E b E , 18, C E , 27, B Graphes orientés T ES - 2011-2012 juin 2011 9 / 18 Algorithme de Dijkstra sur le graphe Sixième itération On fixe G avec le poids 29. S = {D, A, C , B, F , E , G }. Tous les sommets étant fixés, on peut reconstituer le chemin le plus court en remontant la chaı̂ne ainsi obtenue. A, 3, D 35 b 3 D, 0 5 b 9 13 C , 8, A 10 15 b B, 12, D Pascal Blondet ([email protected]) b 8 b 12 F , 16, C F , 38, A b 14 G , 29, F G , 32, E b E , 18, C E , 27, B Graphes orientés T ES - 2011-2012 juin 2011 10 / 18 Algorithme de Dijkstra sur le graphe Conclusion Le chemin le plus court est donc : D − A − C − F − G , de poids 29. A 3 D b 5 b 8 b 12 9 b B Pascal Blondet ([email protected]) F 35 b 13 C b 10 G , 29 14 15 b E Graphes orientés T ES - 2011-2012 juin 2011 11 / 18 Algorithme de Dijkstra dans un tableau Étape initiale A 3 D F 35 b b 5 b 8 b 12 9 b B 13 C b 10 G 14 15 b E On peut aussi décrire l’application de l’algorithme de Dijkstra en réalisant un tableau. Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 12 / 18 Algorithme de Dijkstra dans un tableau Étape initiale A 3 D F 35 b b 5 b 8 b 12 9 13 C b 10 15 b G 14 b B E Sur la première ligne, on écrit les sommets du graphe, en commençant par le sommet du départ D, les sommets adjacents à D, les autres sommets en terminant par le sommet de fin. (D) A B C E F G Algorithme de Dijkstra dans un tableau Étape initiale A 3 D F 35 b b 5 b 8 b 12 9 13 C b 10 15 b G 14 b B E Sur la deuxième ligne, on écrit en rouge, le poids nul pour le sommet de départ et on entoure le sommet (D) pour indiquer qu’il est fixé. (D) 0 A B Pascal Blondet ([email protected]) C E Graphes orientés T ES - 2011-2012 F G juin 2011 12 / 18 Algorithme de Dijkstra dans un tableau Étape initiale A 3 D F 35 b b 5 b 8 b 12 9 13 C b 10 15 b G 14 b B E Le poids et le sommet de provenance pour les sommets adjacents. (D) 0 A B 0+3 = 3 (D) 0+12 = 12 (D) Pascal Blondet ([email protected]) C E Graphes orientés T ES - 2011-2012 F G juin 2011 12 / 18 Algorithme de Dijkstra dans un tableau Étape initiale A 3 D F 35 b b 5 b 8 b 12 13 C 9 b 10 15 b G 14 b B E Le symbole infini pour les autres sommets. (D) 0 A B C E F G 0+3 = 3 (D) 0+12 = 12 (D) ∞ ∞ ∞ ∞ Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 12 / 18 Algorithme de Dijkstra dans un tableau Première itération A 3 D F 35 b b 5 b 8 b 12 9 13 C b 10 15 b G 14 b E B Après avoir chosit le sommet non fixé de plus faible poids, A, on l’entoure. (D) 0 (A) B 3 (D) 12 (D) C ∞ E ∞ F ∞ G ∞ Algorithme de Dijkstra dans un tableau Première itération A 3 D F 35 b b 5 b 8 b 12 9 13 C b 10 15 b G 14 b E B On note en rouge dans sa colonne le poids de la chaı̂ne y conduisant ainsi que le sommet de provenance. (D) 0 (A) B 3 (D) 12 (D) C ∞ E ∞ F ∞ G ∞ 3(D) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 13 / 18 Algorithme de Dijkstra dans un tableau Première itération A 3 D F 35 b b 5 b 8 b 12 13 C 9 b 10 15 b G 14 b E B Dans la colonne des sommets adjacents à A, on ajoute les poids chaı̂nes y conduisant avec le rappel du sommet fixé D d’origine. (D) 0 (A) B 3 (D) 12 (D) 3(D) Pascal Blondet ([email protected]) C ∞ E ∞ 3+5 = 8 (A) Graphes orientés T ES - 2011-2012 F ∞ G ∞ 3 + 35 = 38(A) juin 2011 13 / 18 Algorithme de Dijkstra dans un tableau Première itération A 3 D F 35 b b 5 b 8 b 12 13 C 9 b 10 15 b G 14 b E B On complète en réécrivant les indications de la ligne précédente. (D) 0 (A) B 3 (D) 12 (D) 3(D) 12 (D) Pascal Blondet ([email protected]) C ∞ E ∞ F ∞ G ∞ 3+5 = 8 (A) ∞ 3 + 35 = 38(A) ∞ Graphes orientés T ES - 2011-2012 juin 2011 13 / 18 Algorithme de Dijkstra dans un tableau deuxième itération A 3 D F 35 b b 5 8 b b 12 9 13 C b 10 15 b B G 14 b E Le nouveau sommet fixé est C. Ses sommets adjacents sont alors marqués. (D) 0 (A) B 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 8 (A) Pascal Blondet ([email protected]) E ∞ ∞ Graphes orientés T ES - 2011-2012 F ∞ 38(A) G ∞ ∞ juin 2011 14 / 18 Algorithme de Dijkstra dans un tableau deuxième itération A 3 D F 35 b b 5 8 b b 12 9 13 C b 10 15 b B G 14 b E Le nouveau sommet fixé est C. Ses sommets adjacents sont alors marqués. (D) 0 (A) B 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 8 (A) E ∞ ∞ F ∞ 38(A) G ∞ ∞ 8(A) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 14 / 18 Algorithme de Dijkstra dans un tableau deuxième itération A 3 D F 35 b b 5 8 b b 12 9 13 C b 10 15 b B G 14 b E Pour le sommet adjacent F, le poids de la chaı̂ne passant par C est inférieur à celui de celle venant de A. On retiendra le chemin venant de C. (D) 0 (A) B 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) Pascal Blondet ([email protected]) 8 (A) E ∞ ∞ 38(A) 8(A) 8+10 = 18 8 + 8 = 16 (C) (C) Graphes orientés T ES - 2011-2012 F ∞ G ∞ ∞ juin 2011 14 / 18 Algorithme de Dijkstra dans un tableau deuxième itération A 3 D F 35 b b 5 8 b b 12 9 13 C b 10 15 b B G 14 b E Pour le sommet adjacent F, le poids de la chaı̂ne passant par C est inférieur à celui de celle venant de A. On retiendra le chemin venant de C. (D) 0 (A) B 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 12 (D) Pascal Blondet ([email protected]) 8 (A) E ∞ ∞ 38(A) G ∞ ∞ 8(A) 8+10 = 18 8 + 8 = 16 ∞ (C) (C) Graphes orientés T ES - 2011-2012 F ∞ juin 2011 14 / 18 Algorithme de Dijkstra dans un tableau troisième itération A 3 D F 35 b b 5 8 b b 12 9 b 10 15 b 13 C B G 14 b E Le nouveau sommet fixé est B. (D) 0 (A) (B) 0+3=3 0 + 12 = 12 (C) ∞ E ∞ F ∞ G ∞ ∞ ∞ (D) (D) 3(D) 12 (D) 8 (A) ∞ 38(A) 12 (D) 8(A) 18 (C) 16 (C) 12(D) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 15 / 18 Algorithme de Dijkstra dans un tableau troisième itération A 3 D F 35 b b 5 8 b b 12 9 b 10 15 b 13 C B G 14 b E Le sommet adjacent C est déjà fixé et donc exclue des calculs. (D) 0 (A) (B) 0+3=3 0 + 12 = 12 (C) ∞ E ∞ F ∞ G ∞ ∞ ∞ (D) (D) 3(D) 12 (D) 8 (A) ∞ 38(A) 12 (D) 8(A) 18 (C) 16 (C) 12(D) Pascal Blondet ([email protected]) ∞ Graphes orientés T ES - 2011-2012 juin 2011 15 / 18 Algorithme de Dijkstra dans un tableau troisième itération A 3 D F 35 b b 5 8 b b 12 9 b 10 15 b 13 C B G 14 b E Pour le sommet adjacent E, le poids de la chaı̂ne passant par B est supérieur à celui de celle venant de C. On conserve donc cette dernière. (D) 0 (A) (B) 0+3=3 0 + 12 = 12 (C) ∞ E ∞ F ∞ G ∞ ∞ ∞ (D) (D) 3(D) 12 (D) 8 (A) ∞ 38(A) 12 (D) 8(A) 18 (C) 16 (C) 12(D) 12 + 15 = ∞ 27 > 18 18(C) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 15 / 18 Algorithme de Dijkstra dans un tableau troisième itération A 3 D 8 b 9 15 b (A) (B) 0 + 12 = 12 13 C b 10 B 0+3=3 b 5 b 12 (D) 0 F 35 b G 14 b E (C) ∞ E ∞ F ∞ G ∞ (D) (D) 3(D) 12 (D) 8 (A) ∞ 38(A) 12 (D) 8(A) 18 (C) 16 (C) ∞ ∞ 12 + 15 = 16 (C) ∞ 12(D) 27 > 18 18(C) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 15 / 18 Algorithme de Dijkstra dans un tableau quatrième itération A 3 D F 35 b b 5 b b 12 9 b 15 8 13 10 14 C b G b E B Le nouveau sommet fixé est F. (D) 0 (A) (B) 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 12(D) 12(D) 8 (A) E ∞ ∞ (F) ∞ 38 (A) 8(A) 18 (C) 16 (C) 18 (C) 16 (C) G ∞ ∞ ∞ ∞ 16(C ) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 16 / 18 Algorithme de Dijkstra dans un tableau quatrième itération A 3 D F 35 b b 5 b b 12 9 b 15 8 13 10 14 C b G b E B G est son unique sommet adjacent. (D) 0 (A) (B) 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 12(D) 12(D) 8 (A) E ∞ ∞ (F) ∞ 38 (A) 8(A) 18 (C) 16 (C) 18 (C) 16 (C) G ∞ ∞ ∞ ∞ 16(C ) 16 + 13 = 29(F) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 16 / 18 Algorithme de Dijkstra dans un tableau quatrième itération A 3 D b b 9 b 15 8 13 10 14 C b G b E B (A) (B) 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 12(D) 12(D) b 5 12 (D) 0 F 35 b 8 (A) E ∞ ∞ 38 (A) 8(A) 18 (C) 16 (C) 18 (C) 16 (C) 18 (C) (F) ∞ G ∞ ∞ ∞ ∞ 16(C ) 16 + 13 = 29(F) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 16 / 18 Algorithme de Dijkstra dans un tableau cinquième itération Pour son seul sommet adjacent G, le poids de la chaı̂ne passant par E est supérieur à celui de celle venant de F. On conserve donc cette dernière. (D) 0 (A) (B) 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 12(D) 12(D) 8 (A) (E) ∞ ∞ 18 (C) 16 (C) G ∞ ∞ ∞ ∞ 38 (A) 8(A) 18 (C) 16 (C) 18 (C) 16 (C) 29 (F) 18(C ) (F) ∞ 18 + 14 = 32 > 29 29(F) Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 17 / 18 Algorithme de Dijkstra dans un tableau dernière itération et conclusion (D) 0 (A) (B) 3 (D) 12 (D) (C) ∞ 3(D) 12 (D) 12(D) 12(D) 8 (A) (E) ∞ ∞ 18 (C) 16 (C) (G) ∞ ∞ ∞ ∞ 38 (A) 8(A) 18 (C) 16 (C) 18 (C) 16 (C) 29 (F) 18(C ) (F) ∞ 29(F) 29(F ) Conclusion : Le trajet le plus court est D-A-C-F-G Pascal Blondet ([email protected]) Graphes orientés T ES - 2011-2012 juin 2011 18 / 18