Fiche à trous · Terminale · NSI
Graphes — Structures et algorithmes de parcours
Complétez de mémoire, puis vérifiez avec la page de corrigé.
Deux parcours de graphe visitent exactement les mêmes sommets, et un seul donne au passage le plus court chemin. La différence tient à une structure : une file plutôt qu'une pile.
Représenter un graphe
Définition — Graphe :
Propriété
La règle pratique tient en une phrase : un graphe dense — beaucoup d'arêtes par rapport au nombre de sommets — se représente bien par une matrice d'adjacence ; un graphe creux par une liste d'adjacence. Un réseau social, où chacun connaît une poignée de personnes sur des millions, est extrêmement creux : une matrice y gaspillerait un espace considérable pour stocker presque uniquement des zéros.
Les deux parcours
Règle
4Piège
Utiliser un parcours en profondeur pour déterminer la plus courte distance entre deux sommets.
Plus court chemin en nombre d'arêtes : BFS, donc une file.
Cette garantie du BFS vaut pour le nombre d'arêtes, c'est-à-dire pour un graphe non pondéré, ou dont toutes les arêtes coûtent la même chose. Dès que les arêtes portent des poids différents, le chemin le plus court en nombre d'arêtes n'est plus forcément le moins coûteux : il faut alors Dijkstra.
Dijkstra
Propriété
La condition de positivité n'est pas une formalité. Dijkstra fige la distance d'un sommet dès qu'il le traite, en supposant qu'aucun chemin ultérieur ne fera mieux. Avec un poids négatif, un détour peut réduire la distance après coup : l'hypothèse tombe, et l'algorithme renvoie un résultat faux sans le signaler.
Programmer un parcours de graphe
- 6.
- 7.
- 8.
- 9.
- 10.
- Ai-je choisi la représentation selon la densité du graphe ?
- Ai-je marqué les sommets visités avant de les empiler ?
- Pour un plus court chemin, ai-je bien employé une file — donc le BFS ?
- Mon graphe est-il pondéré ? Alors Dijkstra, pas BFS.
- Mes poids sont-ils positifs avant d'appliquer Dijkstra ?
- Ai-je mémorisé les prédécesseurs si je dois reconstituer le chemin ?