• Aucun résultat trouvé

Algorithme de Dijkstra. 1 Problématique : recherche du plus court chemin

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithme de Dijkstra. 1 Problématique : recherche du plus court chemin"

Copied!
5
0
0

Texte intégral

(1)

Algorithme de Dijkstra 1 Problématique : recherche du plus court chemin

Les applications utilisant les signaux des satellites GPS sont en plein essor. Elles ne se limitent pas aux véhicules automobiles, puisqu'elles sont par exemple intégrées dans certains appareils photographiques.

Cependant, dans le cas des véhicules, s'y ajoute le calcul de l'itinéraire optimal entre deux lieux géographiques optimal au regard de critères tels que distance, temps ou coût total.

Comment un terminal de navigation GPS calcule-t-il l'itinéraire entre le lieu de départ et le lieu d'arrivée ? Comment prend-il en compte des critères tels que la distance, le temps, le coût (carburant et péages d'autoroutes) ?

Et comment fait-il pour proposer en quelques secondes un nouvel itinéraire alors que l'on vient d'oublier de tourner à droite comme il le suggérait ?

Dans cette partie, vous allez découvrir les graphes, utilisés pour représenter la situation, et un algo- rithme qui répond à ce problème : l'algorithme de Dijkstra.

1.1 Qu'est-ce qu'un graphe ?

Un graphe c'est quelque chose qui ressemble à un truc comme ça :

Un graphe est composé de sommets (parfois appelés noeuds) et d'arêtes ou d'arcs, éventuellement pondérés.

Graphe orienté : les sommets sont reliés par des arcs (èches) et non des arêtes (traits). On ne peut pas remonter un arc dans le mauvais sens, alors qu'une arrête se traverse dans n'importe quel sens. C'est le cas du troisième graphe.

Graphe pondéré : un nombre réel positif, un poids", est associé à chaque arc ou arête. Il peut représenter un coût ou une distance. C'est le cas du deuxième graphe.

Pour mieux comprendre voilà un tableau faisant le parallèle entre le vocabulaire des graphes et le

(2)

Vocabulaire des graphes Vocabulaire routier Graphe (pondéré) Réseau routier

Sommet ou noeud Ville ou intersection de routes

Arête Route

Arc Route à sens unique

Poids Distance, durée, ou coût

2 Algorithme de Dijkstra

Nous allons expliquer la méthode de l'algorithme de Dijkstra à l'aide de l'exemple ci-dessous. D est le point de départ et A le point d'arrivée. Le but de l'algorithme est de trouver le chemin le plus court entre D et A.

EXERCICE 1

En tâtonnant, quel semble être le chemin le plus court entre D et A ? EXERCICE 2

Suivre la démarche suivante expliquant le principe de l'algorithme de Dijkstra.

1. Ouvrir un tableur. Donner un nom à votre chier et pensez à l'enregistrer régulièrement.

2. Indiquer les villes du graphe (sauf D, notre point de départ) et une case Prochaine ville sélec- tionnée dans les cases A1 à A6.

A B C E F Prochaine ville sélectionnée

Nous allons remplir ce tableau avec diérentes lignes. La première ligne indiquera la longueur du chemin le plus court entre D et la ville de la colonne en utilisant 1 route. La deuxième ligne indiquera la longueur du chemin le plus court entre D et la ville de la colonne en utilisant (au maximum) 2 routes, etc. La dernière ligne du tableau indiquera donc la longueur du chemin le plus court entre D et la ville de la colonne (n particulier dans la colonne A, la longueur du chemin le plus court entre D et A).

Là où l'algorithme est ingénieux est qu'il va se rappeler à chaque étape où passer. On pourra trouver facilement le chemin à emprunter en remontant les étapes.

Dans le tableau, au lieu d'indiquer 6 uniquement pour indiquer un parcours de 6 km, on indiquera

(3)

3. Première étape de l'algorithme : On part de D et on ne peut emprunter qu'une route.

• B est à une distance totale de 3 km : on note 3(D) dans la colonne B

• E est à une distance totale d'1 km : on note 1(D) dans la colonne E.

• Pour les autres villes, qui sont à plus d'une étape de D, on note inf pour inni.

• On continue en allant voir le n÷ud le plus proche de D. C'est E ! A B C E F Prochaine ville sélectionnée

inf 3(D) inf 1(D) inf E

4. Deuxième étape de l'algorithme : On part de D, on passe par E et on peut emprunter 1 route supplémentaire.

• La plus courte distance entre D et E est 1, c'est dénitif, on ne pourra jamais faire mieux (tous les autres n÷uds sont plus loin de D, inutile d'y passer pour gagner du temps), on colorie la case de E en gris. On n'y touchera plus.

• A n'est pas directement reliée à E : on ne change rien dans la colonne A.

• passer via E pour aller à B est plus court que d'aller de D à B directement (1+1 = 2 <3).

On change la valeur dans la case en indiquant que l'on doit venir de E. B est à une distance totale de 2 km (1+1) : on note 2 (E) dans la colonne B

• C est à une distance totale de 4 km (1+3) : on note 4 (E) dans cette colonne.

• F est à une distance totale de 6 km (1+5) : on note 6 (E) dans la colonne F.

• La prochaine ville sélectionnée est B (plus courte distance : 2 km, parmi les villes qui ne sont pas en gris).

A B C E F Prochaine ville sélectionnée

inf 3(D) inf 1(D) inf E

inf 2(E) 4(E) 1(D) 6(E) B

5. Continuer l'algorithme dans le tableur. La case de la colonne B reste inchangée et on la colorie en gris. On regarde les distances entre D et la colonne en passant par B. On ne change la valeur que si la distance est plus courte. Et on recommence ainsi de suite jusqu'à ce que la ville d'arrivée (ici A) soit sélectionnée.

La dernière ligne obtenue devrait être :

6(F) 2(E) 4(E) 1(D) 5(C) A

6. Penser à enregistrer votre travail.

7. Pour obtenir le chemin le plus court entre D et A, il sut de remonter les lettres indiquées entre parenthèses. Le chemin le plus court est de 6 km, via F. Pour arriver en F, il y a 5 km en venant de C. Pour arriver en C, il y 4 km en venant de E. Et pour aller en E, le plus court est d'y aller directement (de venir de D).

Le chemin le plus court est donc D, E, C, F, A.

(4)

3 Application sur un autre exemple

En général, on recherche le chemin le moins long, le plus rapide, ou le moins cher ...

Tous les chemins mènent à Rome, mais pour un parmesan (un habitant de Parme !), quel est le chemin le moins long ? Le plus rapide ? Le moins cher ? Est-ce le même chemin dans les trois cas ?

EXERCICE 3

Choisir l'un des critère : longueur, rapidité ou prix. Trouver le plus court chemin entre Parme et Rome en appliquant l'algorithme de Dijkstra sur cet exemple (détailler le déroulé de l'algorithme à l'aide d'un tableau).

(5)

4 Vers l'écriture de l'algorithme

Si l'on voulait coder cet algorithme en Python, il faudrait maintenant rééchir à la représentation des données. Comment code-t-on un graphe ? La prochaine ville sélectionnée ? La ville d'où il faut venir ? Ce travail est aussi une partie du travail importante en algorithmique. C'est seulement après cette étape que l'on peut écrire du pseudo-code ou coder l'algorithme dans un langage.

Voici un exemple de programmation de l'algorithme de Dijkstra en Python.

Il utilise une matrice d'adjacence : pour chaque n÷ud (D, B, E, F, C, A sont représentés par les nombres 0, 1, 2, 3, 4, 5), on créer une liste donnant la distance avec les autres n÷uds (en indiquant 0 si les deux n÷uds ne sont pas reliés directement). On fait ensuite une liste m_adjac... des 6 listes ! La valeur m_adjac[4][2] est la valeur 2 de la liste 4.

Il utilise ensuite une liste correspondant à une ligne le tableur : chaque case du tableur est représentée une liste de 3 valeurs (la distance, la ville d'où on vient, et "N" si la case blanche "O" si elle est grise).

La prochaine ville sélectionnée est ville_select.

Références

Documents relatifs

• Le problème du plus court chemin consiste à déterminer le chemin de coût minimum reliant un nœud a à un nœud b.. • On peut le voir comme un problème

Le chemin de Mona est tracé en bleu sur le 2 ème dessin.. Le chemin d’Elio est tracé en noir sur le

Les coordonnées des différents points du plan sont stockées dans une liste à deux éléments [x, y].. Les différentes coordonnées des adresses sont stockées dans

Ce problème est résolu par programmation dynamique, avec comme variables d'état, des couples {temps, longueur) associés aux nœuds. Pour le problème classique d'un plus court

Le parcours en largeur donne le plus court chemin mais utilise beaucoup de m´ emoire.. Dijkstra ´ etait le parcours en largeur avec

Mathias est dans sa maison et décide de rendre visite à quatre de ses amis (Julie, Léo, Fabien et Kevin) en VTT?. Dans quel ordre doit-il rencontrer ses amis pour effectuer le

[r]

une loi d’évolution décrivant le changement infinitésimal (temps continu) de l’état du système, ou une loi d’évolution donnant l’état du système au temps t+1 en fonction