Graphes pondérés et algorithme de Dijkstra 1 Graphes pondérés Activité 1 : Avec un ordinateur (p68) 1.1 Définitions Définition 1. Un graphe pondéré (orienté ou non) est un graphe étiqueté dont toutes les étiquettes sont des nombres réels positifs ou nul. Chaque nombre est appelé poids. • Le poids d’une arête est le nombre positif qui lui est affectée. • Le poids d’une chaîne est la somme des poids des arêtes qui la composent. • Une plus petite courte chaîne entre deux sommets données est une chaîne de poids minimal parmi toutes les chaînes reliant les deux sommets. 1.2 (l’algorithme de DIJKSTRA) Exemple : Soit le graphe étiqueté G ci-dessous A La chaîne B-A-C est bien une chaîne du graphe, partant du sommet du coté gauche vers le sommet du coté droit: ce mot est reconnu par le graphe. C T La chaîne T-A-C n’est pas une chaîne orientée du graphe, et ne peut donc pas être un mot reconnu par ce graphe. B 2 Algorithme de Dijkstra : Poids d’une chaîne et plus court chemin Exemple : Soit le graphe pondéré G ci-dessous B 2 3 A D 1 2 2 5 C 3 E Le poids de la chaîne A-B-C est de 3+1=4 Le chemin de A à E a plusieurs poids : La chaîne A-B-C-E a un poids de 7. A-B-C-D-E a un poids de 8. A-B-D-E a un poids de 7. A-B-D-C-E a un poids de 10. A-C-E a un poids de 8. A-C-D-E a un poids de 9. A-C-B-D-E a un poids de 10. On remarque qu’il y a deux courts chemins exæquo de A à E (A-B-C-E) et (A-B-D-E ), cette méthode Par tâtonnement est à éviter. Le poids de l’arête A-C est de 5. La méthode la plus utilisée pour trouver le plus court chemin est l’algorithme de Dijkstra. ∀M K T ES Spemaths 2015−2016 1/2 Ch3 - Dijkstra Algorithme de Dijkstra L’algorithme de Dijkstra est un outil de détermination d’une plus courte chaîne d’un graphe pondéré entre deux sommets (A et E dans l’exemple étudié). B 2 3 Exemple Méthode simplifiée pour appliquer l’algorithme de Dijkstra. A D 1 2 2 5 C E 3 1. Étape d’initialisation, Dans un tableau, quand c’est possible, on place le sommet du départ A à la première colonne (début) et le sommet d’arrivée E dans la dernière colonne (à la fin). - Ligne 1 : On fixe le poids du sommet A à 0 (Sommet du départ) - On marque provisoirement les autres sommets du poids par ∞. A B C D E Sommet fixé de son poids 0 ∞ ∞ ∞ ∞ A(0) 2. Étapes d’itérations. - On marque provisoirement chaque sommet adjacent à A du poids de l’arête reliant A à ce sommet. Ces sommets sont des successeurs de A. - Ligne 2 : Pour aller du sommet A au sommet B, il faut un poids de 3. On le le note 3A . De même, pour aller du sommet A au sommet C, il faut un poids de 5. On le le note 5A . On repère le chemin le plus court, ici 3A et on marque définitivement ce sommet B du poids 3 à la fin de cette ligne (B(3)). - Ligne 3 : Le sommet B est relié ensuite aux sommets C et D. On additionne les poids pour aller à chaque sommet. Ainsi, On obtient 4B et 5B. On repère le chemin le plus court, ici 4B , on barre 5A et on marque définitivement ce sommet C du poids 4 à la fin de cette ligne (C(4)). - On réitère le procédé tant que l’arrivée au sommet E n’est pas fixée. On arrête l’itération lorsque tous les sommets ont été traités. A B C D E Sommet fixé 0 ∞ ∞ ∞ ∞ A(0) | 3A 5A ∞ ∞ B(3) | | 6 5A et 4B 5B ∞ C(4) | | | 5B et 6 6C 7C D(5) | | | | 7C et 7D E(7) Conclusion : A la fin de chaque algorithme de Dijkstra, on définit le ou les chemins les plus courts. Il y a deux chaînes courtes pour aller de A à E de même poids 7. On lit à l’envers A(0) ⇐= B(3) ⇐= D(5) ⇐= E(7) , d’où la chaîne A(0) ⇐= B(3) ⇐= C(4) ⇐= E(7) , d’où la chaîne ∀M K T ES Spemaths 2015−2016 2/2 A-B-D-E A-B-C-E Ch3 - Dijkstra