Comment mélanger une liste pour que tous les ordres soient vraiment équiprobables ?
Échanger chaque élément avec un élément tiré parmi tous donne nⁿ issues : 27 pour 3 éléments, qui ne se partagent pas également entre les 6 ordres (5, 5, 5, 4, 4, 4). L'algorithme de Fisher-Yates tire parmi les éléments restants : n! issues, une par ordre, donc un mélange parfaitement uniforme.
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 programmant un jeu de cartes en NSI, j'ai écrit un mélange qui me semblait évident : pour chaque carte, l'échanger avec une carte tirée au hasard. En comptant les résultats sur des millions de mélanges d'un petit jeu, j'ai vu que certains ordres sortaient plus souvent que d'autres. J'ai voulu comprendre ce biais et trouver le bon algorithme.
L'enjeu et les notions du programme
Utiliser le dénombrement pour démontrer qu'un algorithme naturel est biaisé et qu'un autre est exactement uniforme.
Mathématiques
- Principe multiplicatif, permutations, factorielle (terminale)
- Équiprobabilité (première)
- Divisibilité (seconde)
Numérique et sciences informatiques
- Listes, échanges d'éléments (première)
- Module random, simulation (première)
Le plan de l'exposé en 9,5 min
1. Introduction
1 minMélanger une liste de n éléments, c'est choisir l'une des n! permutations. Un bon mélange doit les rendre toutes équiprobables : chacune doit sortir avec la probabilité 1/n!. Problématique : quel algorithme le garantit ?
2. Mathématiques : compter les issues
4 minMélange naïf : pour i de 0 à n-1, échanger l'élément i avec un élément d'indice j tiré parmi les n. Il y a n tirages à n issues : nⁿ déroulements équiprobables. Pour que les n! permutations soient équiprobables, il faudrait que chacune soit obtenue par le même nombre de déroulements, donc que n! divise nⁿ.
Pour n=3 : 3³=27 déroulements et 3!=6 permutations. Or 6 ne divise pas 27 (27 est impair). Le biais est donc certain. Le décompte exact donne trois ordres obtenus 5 fois et trois ordres obtenus 4 fois : probabilités 5/27≈0,185 et 4/27≈0,148, au lieu de 1/6≈0,167.
Fisher-Yates : pour i de n-1 à 1, échanger l'élément i avec un élément tiré parmi les indices 0 à i. Nombre de déroulements : n×(n-1)×…×2=n!. Chaque déroulement donne une permutation différente, donc chaque permutation est obtenue exactement une fois : probabilité 1/n!.
3. NSI : vérifier par simulation
3 minEn Python, on mélange un million de fois la liste [0, 1, 2] et l'on compte chaque ordre avec un dictionnaire. Avec la méthode naïve, les fréquences se répartissent autour de 0,185 et 0,148 ; avec Fisher-Yates, toutes sont proches de 0,167.
La fonction random.shuffle utilise Fisher-Yates. Un biais de mélange a déjà eu des conséquences réelles : un site de poker en ligne a été attaqué à la fin des années 1990 parce que son mélange (et son générateur) ne produisait qu'une petite partie des ordres possibles.
4. Conclusion
1,5 minLe mélange naïf produit nⁿ issues, que l'on ne peut pas répartir également entre n! ordres : il est biaisé. Fisher-Yates produit exactement n! issues, une par ordre : il est uniforme. Un dénombrement suffit à démontrer l'équité d'un algorithme. J'ouvre sur le mélange des cartes à la main, où il faut environ sept battements pour bien mélanger un jeu.
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.
Fisher-Yates : n×(n-1)×…×2=n! ⇒ P=1/n!
Conclusion : la réponse à la question
Un mélange est équitable si chaque ordre correspond au même nombre de déroulements. Le dénombrement détecte le biais du mélange naïf et prouve l'uniformité de Fisher-Yates.
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 6 ne divise-t-il pas 27 ?
27 est impair alors que 6 est pair ; plus généralement, n − 1 divise n! mais pas n^n.
Combien de déroulements pour Fisher-Yates avec 4 éléments ?
4×3×2=24=4!.
Pourquoi deux déroulements de Fisher-Yates ne donnent-ils jamais le même ordre ?
L'élément placé en dernière position est fixé au premier tirage, puis le suivant, etc. : chaque suite de tirages détermine un ordre unique.
Comment vérifier un mélange par simulation ?
On répète le mélange un grand nombre de fois et on compare les fréquences de chaque ordre à 1/n!.
Combien d'ordres pour un jeu de 52 cartes ?
52!≈8×10⁶⁷.
Les pièges qui coûtent des points
- Croire qu'un algorithme qui « mélange beaucoup » est forcément uniforme.
- Oublier que n^n issues équiprobables ne se répartissent pas toujours également.
- Tirer j parmi tous les indices dans Fisher-Yates.
Revoir les notions
Autres questions : hasard et simulation
- Comment un ordinateur, machine parfaitement déterministe, peut-il produire du hasard ?
- Comment simuler un dé à six faces équitable avec une simple pièce de monnaie ?
- Peut-on obtenir un tirage parfaitement équitable avec une pièce truquée dont on ignore le biais ?
- Après n pas faits au hasard, à quelle distance de son point de départ se trouve-t-on ?
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 →