../../../../../../_images/cover2.jpeg

L’algorithme du plus court chemin de Dijkstra


Activité collaborative et débranchée pour introduire l’algorithme du plus court de chemin de Dijkstra.


Informations techniques

  • ⏳ : 2 périodes

  • 🔌 : débranché

  • 📕 : algorithmique

  • 💡 : découvrir l’algorithme de Dijkstra, son utilité, son fonctionnement

  • 🔧 : connexion internet pour la mise en situation

1. Mise en situation générale

L’enseignant va sur une page de navigation (p.ex OpenStreetMap) et montre un exemple de requête de chemin pour relier deux points.

  • Comment le site web a-t-il déterminé le chemin qu’il nous indique ?

  • Quelles données a-t-il à sa disposition pour déterminer ce chemin ?

  • Tout le réseau routier est représenté sous forme d’un graphe.

  • Les croisements et embranchements sont représentés par les sommets du graphe et les routes qui les relient sont représentées par les arêtes du graphe.

2. Mise en situation spécifique

L’enseignant distribue à chaque élève un graphe suffisamment compliqué dans lequels la longueur des arêtes est indiquée. Ils doivent trouver, individuellement, le plus court chemin reliant deux points. Le graphe est tel qu’il y a plusieurs plus courts chemins.

graphe 1

Mise en commun

  • Qui a trouvé le plus court chemin ?

  • Etes-vous sûr qu’il s’agit du plus court chemin? Le cas échéant, comment le savez-vous ?

  • Chacun donne son plus court chemin.

  • Y a-t-il des chemins plus courts que ça ?

Dans un voyage en voiture, on ne veut pas forcément le plus court chemin, mais souvent le plus rapide.

Par exemple, on va prendre l’autoroute de contournement de Lausanne qui est plus longue, mais plus rapide que de traverser la ville.

On retrouve le même graphe qu’avant, mais cette fois on a le temps de parcours entre chaque point qui est indiqué et on ne peut plus se baser sur les aspects géométriques pour trouver le plus courts chemin.

graphe 2

Mise en commun

  • Qui a trouvé le plus court chemin ?

  • Etes-vous sûr qu’il s’agit du plus court chemin? Le cas échéant, comment le savez-vous ?

  • Chacun-e donne son plus court chemin.

  • Y a-t-il des chemins plus courts que ça ?

  • Que faut-il faire pour être sûr-e que ce soit vraiment le plus court ?

3. Identification du problème

Le problème est donc donnée sous forme d’un graphe constitué de sommets reliés par des arêtes qui ont une certaine longueur. Dans le cas ci-desssus, les sommets représentent des villes, les arêtes les routes, et les longueurs la durée du trajet. La longueur totale est donnée par la somme des longueurs des arêtes empruntée.

4. Découverte

🎲 Activité

Pour déterminer le plus court chemin dans ce graphe, la classe va le faire tous ensemble. Chaque élève représente un sommet et reçoit le sous-graphe constitué de son sommet et ses voisins directs (autrement dit une liste de ses voisins et les distances correspondantes). Chaque élève prend en outre une feuille avec un crayon et une gomme.

Attention

Cette activité implémente dans les faits une version distribuée de l’algorithme où les sommets peuvent changer de zone en parallèle. Il est conseillé de bien marquer la transition à l’algorithme séquentiel.

5. Formalisation

L’enseignant formalise l’algorithme au tableau avec l’aide des élèves. Pour aider à la compréhension et à la représentation, il peut utiliser des couleurs pour dénommer les zones et ainsi pouvoir changer les sommets de zone en modifiant la couleur (ou en utilisant un autre moyen graphique). Ici la zone A est “rouge”, la zone B est “verte” et la zone C est “blanche” (non marquée).

6. Exemples d’utilisation

L’enseignant fait un exemple au tableau avec les élèves et leur propose ensuite d’essayer seuls ou par deux sur des graphes donnés.

Ce jeu consiste à trouver une manière de relier deux mots ayant le même nombre de lettres (par exemple VERSE et LITRE) avec une série de mots existants dont chaque mot ne diffère du précédent que d’une seule lettre. Dans notre exemple, une solution est donnée par :

VERSE - VERRE - SERRE - SEVRE - LEVRE - LIVRE - LITRE

On suppose disposer d’une liste de tous les mots de la langue française.

Comment l’algorithme du plus cours chemin peut-il être utilisé pour trouver une solution à ce jeu ? En particulier, quel graphe serait-il nécessaire de construire, à quoi correspondrait ses nœuds et ses arêtes et ses distances ?

Selon le niveau atteint en programmation, une petite application proposant ce jeu et les solutions correspondantes pourrait être programmée par exemple en utilisant une libraire de graphe telle que igraph ou networkX en python.

L’autre jour, vous avez flashé sur quelqu’un que vous ne connaissez pas mais dont vous avez réussi à obtenir le nom. Après avoir passé beaucoup de temps sur son profil dans votre réseau social préféré, vous recevez une notification vous indiquant quel ami-e pourra sans doute vous aider à vous rapprocher de cette personne. Comme ce réseau social a-t-il pu utiliser l’algorithme de Dijkstra pour vous faire cette recommandation?