MathLvl
Question transversaleMathsNSIHasard et simulation

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. 1. Introduction

    1 min

    Mé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. 2. Mathématiques : compter les issues

    4 min

    Mé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. 3. NSI : vérifier par simulation

    3 min

    En 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. 4. Conclusion

    1,5 min

    Le 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.

naïf : nⁿ issues n=3: 27 issues pour 6 ordres ⇒ 5,5,5,4,4,4
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

Toutes les questions maths-nsi →

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 →