Pourquoi trouver le plus court circuit passant par vingt villes est-il si difficile ?
Pour n villes, il y a (n − 1)!/2 circuits différents : 181 440 pour 10 villes, 6 × 10¹⁶ pour 20, soit près de deux ans à un milliard de circuits par seconde. On utilise des heuristiques, comme aller toujours au plus proche voisin, sans garantie d'optimalité.
Grand oral session 2027 : exposé de 10 minutes debout, puis 10 minutes d'échange, sans calculatrice. Plan prévu pour 9,5 min.
Pourquoi cette question : un modèle d'introduction
Le jury attend que vous expliquiez pourquoi vous avez choisi la question. Inspirez-vous de ce modèle, mais racontez votre propre parcours.
En regardant un livreur de colis enchaîner ses arrêts dans mon quartier, je me suis demandé comment son application choisissait l'ordre des livraisons. J'ai découvert le « problème du voyageur de commerce », simple à énoncer et pourtant non résolu efficacement. J'ai voulu comprendre pourquoi en comptant les circuits possibles.
L'enjeu et les notions du programme
Dénombrer les circuits par les permutations, comparer factorielle et exponentielle, et justifier le recours aux heuristiques.
Mathématiques
- Permutations, factorielle (terminale)
- Comparaison de croissances, ordres de grandeur (terminale)
- Distances dans un repère (seconde)
Numérique et sciences informatiques
- Graphes pondérés (terminale)
- Algorithmes gloutons, heuristiques (première)
Le plan de l'exposé en 9,5 min
1. Introduction
1 minUn voyageur doit visiter n villes une fois chacune et revenir à son point de départ, en parcourant la plus petite distance. Problématique : pourquoi ne peut-on pas simplement essayer tous les circuits ?
2. Mathématiques : compter les circuits
4 minOn fixe la ville de départ. Les n-1 autres peuvent être visitées dans (n-1)! ordres. Chaque circuit est compté deux fois (une fois dans chaque sens) : il y a ((n-1)!)/2 circuits distincts.
Pour 5 villes : 4!/2=12. Pour 10 villes : 9!/2=181 440, instantané. Pour 20 villes : 19!/2≈6,1×10¹⁶ ; à 10⁹ circuits par seconde, environ 6×10⁷ secondes, près de deux ans. Pour 30 villes, plus de 10³⁰ circuits.
La factorielle croît encore plus vite que l'exponentielle : n!/2ⁿ tend vers +∞, car à partir de n=4, on multiplie à chaque étape par un facteur (n+1)/2≥2.
3. NSI : des solutions approchées
3 minOn modélise par un graphe complet pondéré : sommets les villes, poids les distances. L'heuristique du plus proche voisin part d'une ville et va toujours à la ville non visitée la plus proche : environ n² opérations, mais le résultat peut être de 20 à 25 % plus long que l'optimum en moyenne.
On l'améliore ensuite localement, par exemple en échangeant deux arêtes qui se croisent (méthode 2-opt) : un circuit qui se croise n'est jamais optimal. Les logiciels de tournées combinent ces méthodes et trouvent en pratique de très bonnes solutions pour des milliers d'arrêts, sans preuve qu'elles soient les meilleures.
4. Conclusion
1,5 minLe voyageur de commerce est difficile parce que le nombre de circuits, ((n-1)!)/2, explose plus vite qu'une exponentielle. On se contente d'heuristiques rapides et de bonne qualité. J'ouvre sur l'algorithme de Dijkstra, qui résout vite un problème voisin : le plus court chemin entre deux villes.
Ce que j'écris au tableau
Pas de calculatrice ni de support numérique : un calcul clé écrit au tableau rend l'exposé concret et montre la solidité des connaissances.
6,1×10¹⁶/10⁹ s ≈1,9 an ((n+1)!)/2ⁿ⁺¹=n!/2ⁿ×(n+1)/2
Conclusion : la réponse à la question
Vingt villes suffisent à rendre l'énumération impraticable, car la factorielle dépasse toute exponentielle. L'informatique répond par des heuristiques, rapides et efficaces, mais sans garantie d'optimalité.
Les questions probables du jury
Pendant les 10 minutesd'échange, le jury vous fait préciser et approfondir, sur tout le programme de vos spécialités en lien avec la question.
Pourquoi diviser par 2 ?
Parcourir un circuit dans un sens ou dans l'autre donne la même distance.
Combien de circuits pour 4 villes ? Énumérez-les.
3!/2=3 : ABCD, ABDC, ACBD (en partant de A, sens identifiés).
Pourquoi un circuit qui se croise n'est-il pas optimal ?
Par l'inégalité triangulaire, remplacer les deux segments qui se croisent par les deux autres côtés du quadrilatère raccourcit le trajet.
Quel est le coût de l'heuristique du plus proche voisin ?
À chaque étape, on cherche le minimum parmi les villes restantes : environ n²/2 comparaisons.
Le plus court chemin entre deux villes est-il aussi difficile ?
Non : l'algorithme de Dijkstra le trouve rapidement.
Les pièges qui coûtent des points
- Oublier de fixer la ville de départ et compter n! circuits.
- Croire qu'une heuristique donne toujours l'optimum.
- Confondre le voyageur de commerce et le plus court chemin entre deux points.
Revoir les notions
Autres questions : algorithmes et complexité
- Pourquoi trier un million de nombres peut-il prendre dix minutes ou un centième de seconde selon l'algorithme ?
- Pourquoi couper un problème en deux permet-il de le résoudre beaucoup plus vite ?
- Peut-on inventer un algorithme de tri encore plus rapide, ou existe-t-il une limite infranchissable ?
- Un ordinateur mille fois plus rapide permet-il de résoudre des problèmes mille fois plus grands ?
Préparer l'oral, pas seulement le contenu
Gestion des 20 minutes de préparation, usage du tableau, posture debout, réponses au jury : la méthode complète, conforme aux règles de la session 2027.
Méthode : traiter une question de Grand oral →