Comment un programme peut-il énumérer toutes les façons de ranger n objets, et combien de temps cela prend-il ?
Pour ranger n objets, on choisit le premier puis on range récursivement les n − 1 autres : P(n) = n × P(n − 1), d'où n! permutations. 10 objets donnent 3 628 800 rangements, énumérés en quelques secondes ; 20 objets, environ 2,4 × 10¹⁸, demanderaient des dizaines d'années.
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.
Pour un exercice de NSI, je devais tester tous les ordres de passage possibles de cinq élèves à un oral. J'ai écrit une fonction récursive qui les générait et j'ai obtenu 120 ordres. En essayant avec 12 élèves, l'ordinateur a mis beaucoup plus longtemps. J'ai voulu relier la structure de mon programme à la formule de la factorielle.
L'enjeu et les notions du programme
Faire coïncider un algorithme récursif et une formule de dénombrement, puis estimer son coût.
Mathématiques
- Permutations, factorielle, principe multiplicatif (terminale)
- Suites définies par récurrence (première)
- Ordres de grandeur (seconde)
Numérique et sciences informatiques
- Récursivité (terminale)
- Listes Python, parcours (première)
Le plan de l'exposé en 9,5 min
1. Introduction
1 minUne permutation de n objets est une façon de les ranger dans un ordre. Problématique : comment un programme peut-il toutes les produire sans en oublier ni en répéter, et combien y en a-t-il ?
2. Mathématiques : la récurrence de la factorielle
3,5 minPour ranger n objets, on choisit celui qui vient en premier (n choix), puis on range les n-1 restants. Si P(n) est le nombre de rangements, P(n)=n× P(n-1) et P(1)=1, donc P(n)=n!.
Ordres de grandeur : 5!=120, 10!=3 628 800, 13!≈6,2×10⁹, 20!≈2,4×10¹⁸. La factorielle dépasse rapidement toute exponentielle de base fixe.
3. NSI : la fonction récursive
3,5 minLa fonction permutations(liste) : si la liste a un seul élément, renvoyer cette seule permutation. Sinon, pour chaque élément x de la liste, calculer les permutations des autres éléments et placer x devant chacune d'elles.
La structure du programme est exactement la récurrence : la boucle « pour chaque x » fait les n choix, l'appel récursif traite les n-1 restants. Chaque permutation est produite une seule fois, car elle est déterminée par son premier élément puis par l'ordre des suivants.
Coût : à un million de permutations par seconde, 10 objets prennent environ 3,6 s ; 13 objets environ 1,7 heure ; 20 objets environ 77 000 ans. Pour les grands n, on n'énumère plus : on cherche directement la permutation voulue, ou on se contente d'un échantillon tiré au hasard.
4. Conclusion
1,5 minUn programme récursif énumère les permutations en reproduisant la récurrence P(n)=nP(n-1) : il y en a n!. Cette croissance factorielle rend l'énumération impossible au-delà d'une quinzaine d'objets. J'ouvre sur le mélange aléatoire de Fisher-Yates, qui tire une permutation uniforme en n étapes.
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.
10!=3 628 800 20!≈2,4×10¹⁸ 2,4×10¹⁸/10⁶×3,16×10⁷≈77 000 ans
Conclusion : la réponse à la question
Énumérer les rangements de n objets, c'est suivre la récurrence de la factorielle. Le programme est simple, mais son coût de n! le limite aux petits ensembles.
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.
Écrivez les permutations de {a, b, c}.
abc, acb, bac, bca, cab, cba : 3! = 6.
Pourquoi n'y a-t-il pas de doublon ?
Deux permutations produites diffèrent soit par leur premier élément, soit, par récurrence, par l'ordre des suivants.
Combien de façons de ranger 5 élèves sur 3 places ?
5×4×3=60 (arrangements).
Combien d'appels récursifs pour 3 éléments ?
1 appel pour 3 éléments, 3 pour 2 éléments, 6 pour 1 élément : 10 appels.
Comment tirer une permutation au hasard sans toutes les générer ?
Par l'algorithme de Fisher-Yates : on échange chaque élément avec un élément tiré au hasard parmi ceux qui restent.
Les pièges qui coûtent des points
- Confondre permutations (n!) et combinaisons.
- Oublier le cas de base d'une liste à un élément (ou vide).
- Sous-estimer la croissance de n!.
Revoir les notions
Autres questions : récursivité et récurrence
- Comment être sûr qu'un programme récursif donne toujours le bon résultat ?
- Pourquoi un programme récursif de quatre lignes met-il des secondes à calculer le 30ᵉ terme de Fibonacci ?
- Pourquoi un programme récursif peut-il « déborder » alors que le même calcul en boucle fonctionne ?
- Comment une figure dessinée par un programme récursif peut-elle avoir une aire nulle et une infinité de triangles ?
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 →