🎟️ Problème du collectionneur de coupons — Nombre de tirages attendu pour tout collectionner
Combien de tirages aléatoires faut-il pour collectionner les N coupons ? Regardez la grille se remplir, comparez les moyennes empiriques à E[T] = N·H_N et à l'approximation N·ln N + γN, avec un histogramme des temps de complétion.
À propos du problème du collectionneur de coupons
Le problème du collectionneur de coupons est un résultat classique de la théorie des probabilités qui pose la question suivante : si chaque tirage aléatoire produit l'un des N types de coupons équiprobables, combien de tirages faut-il en moyenne pour collectionner au moins un exemplaire de chaque type ? Le nombre attendu exact est E[T] = N · HN, où HN = 1 + 1/2 + 1/3 + … + 1/N est le N-ième nombre harmonique. Cette simulation vous permet d'observer le processus de collection en temps réel, de suivre le ralentissement de la courbe de couverture et de comparer la moyenne empirique sur des centaines d'essais à la prédiction théorique.
Ce problème trouve une application pratique partout où un échantillonnage aléatoire doit atteindre une couverture complète : remplir des albums d'autocollants et des collections de cartes à échanger, générer des données de test aléatoires qui parcourent chaque chemin de code, mesurer la diversité des schémas de hachage aléatoires, et estimer l'effort nécessaire pour échantillonner au moins une fois chaque élément d'une population.
Questions fréquentes
Quel est le nombre attendu de tirages pour collectionner tous les N coupons ?
L'espérance exacte est E[T] = N · HN, où HN est le N-ième nombre harmonique (la somme 1 + 1/2 + 1/3 + … + 1/N). Comme HN croît comme ln(N) + γ (avec la constante d'Euler–Mascheroni γ ≈ 0,5772), cela se simplifie en l'approximation bien connue E[T] ≈ N · ln(N) + γ · N. Par exemple, pour N = 20 coupons, le nombre attendu de tirages est d'environ 71,9.
Comment utiliser cette simulation ?
Utilisez le curseur N pour choisir le nombre de types de coupons distincts (2–50), puis cliquez sur Lancer pour observer le déroulement animé d'une collection : la grille s'illumine pour chaque type dès qu'il apparaît pour la première fois, et la courbe de couverture montre la fraction collectée au fil du temps. Cliquez sur Lancer 100 essais pour simuler instantanément de nombreuses collections complètes et construire l'histogramme, qui devrait se regrouper autour de la ligne verte E[T]. Le curseur de vitesse contrôle le nombre de tirages traités par image d'animation.
Pourquoi la courbe de couverture s'aplatit-elle vers la fin ?
Lorsque vous possédez déjà k des N types, chaque nouveau tirage ne tombe sur un type manquant qu'avec une probabilité de (N − k) / N. Quand k se rapproche de N, cette probabilité se réduit vers 1/N, si bien que chaque nouveau coupon unique devient beaucoup plus difficile à trouver. Le nombre attendu de tirages pour passer de k à k+1 est N / (N − k), qui croît sans limite lorsque k → N. Cet effet de « rendements décroissants » aplatit la courbe de couverture et crée la longue queue à droite dans l'histogramme des temps de complétion.
Comment la formule du nombre harmonique est-elle dérivée ?
La dérivation utilise la linéarité de l'espérance. Après avoir collecté k coupons distincts, le temps d'attente jusqu'au prochain nouveau coupon suit une loi géométrique de probabilité de succès p = (N − k) / N, donc sa moyenne est N / (N − k). En sommant pour k = 0, 1, …, N−1, on obtient E[T] = N/N + N/(N−1) + … + N/1 = N · (1 + 1/2 + … + 1/N) = N · HN. La variance est également connue : Var[T] = N2 · Σ(1/k2) ≈ N2 · π2/6 pour N grand.
Quels sont des exemples concrets du problème du collectionneur de coupons ?
Les albums d'autocollants Panini en sont l'exemple le plus connu : un album de la Coupe du monde 2018 comptait 682 autocollants, et les collectionneurs devaient acheter en moyenne environ 4 832 pochettes pour le compléter (à raison de 5 autocollants par pochette). En génie logiciel, le test aléatoire (fuzzing) doit générer suffisamment de données de test pour atteindre chaque branche ; avec N branches, l'effort attendu croît comme N · ln(N). Les protocoles réseau qui attribuent des identifiants aléatoires font face au même problème dual du paradoxe des anniversaires : la rapidité d'apparition d'une collision contre le nombre d'identifiants nécessaires pour couvrir un ensemble.
Est-ce une idée reçue qu'il faut exactement N tirages pour collectionner N coupons ?
Oui — cela ne serait vrai que si l'on pouvait garantir l'absence de répétitions, comme lors d'un tirage sans remise. Avec remise (tirages aléatoires indépendants), les doublons sont inévitables. Le total attendu croît comme N · ln(N), et non comme N, car les derniers coupons nécessitent chacun de nombreux tirages répétés avant que le type manquant n'apparaisse. Pour N = 50, le nombre de tirages attendu est d'environ 225, et non 50. L'histogramme révèle également une longue queue à droite, ce qui signifie qu'il faut parfois bien plus que la moyenne.
Qui a étudié le premier le problème du collectionneur de coupons, et quand ?
Le problème trouve ses racines dans la combinatoire du XVIIIe siècle. Abraham de Moivre a étudié des problèmes d'occupation apparentés dans son ouvrage de 1718, La Doctrine des chances. La formulation moderne et la solution par le nombre harmonique sont devenues connues grâce aux manuels de théorie des probabilités du milieu du XXe siècle. Le nom « collectionneur de coupons » s'est popularisé lorsque les jeux de coupons physiques et les cartes à collectionner sont devenus des produits de consommation courants au début du XXe siècle, offrant une analogie naturelle au problème abstrait d'occupation.
Quels problèmes ou simulations de probabilité connexes sont liés à ce sujet ?
Le problème du collectionneur de coupons est étroitement lié au problème des anniversaires (qui demande quand survient la première collision plutôt que quand toutes les places sont remplies), aux problèmes d'occupation en combinatoire et à l'analyse des fonctions de hachage aléatoires. C'est le dual du collectionnement de coupons : l'un demande la première répétition, l'autre la couverture complète. Les simulations connexes incluent le paradoxe des anniversaires, les problèmes de couverture de marche aléatoire et l'intégration par la méthode de Monte-Carlo, qui impliquent tous des temps d'attente dans des processus aléatoires.
Comment le problème du collectionneur de coupons est-il utilisé en informatique et en ingénierie ?
En test logiciel, le problème quantifie le nombre de données de test aléatoires nécessaires pour atteindre une couverture complète des chemins de code — un étalon pour comparer les tests aléatoires (fuzzing) aux tests systématiques. Dans les systèmes distribués, il modélise le nombre de messages de diffusion nécessaires avant que chaque nœud du réseau en ait reçu au moins un. Les équilibreurs de charge et les tables de hachage utilisent une analyse d'occupation similaire pour prédire quand tous les compartiments seront non vides. La borne N · ln(N) apparaît également dans les algorithmes randomisés pour les problèmes de couverture d'ensembles.
Que se passe-t-il lorsque les coupons ne sont pas équiprobables ou apparaissent par groupes ?
Lorsque les types de coupons ont des probabilités inégales, la formule du nombre harmonique ne s'applique plus. Le temps de complétion attendu est alors déterminé par le coupon le plus rare : si le type le moins probable a une probabilité pmin, le nombre attendu de tirages croît au moins aussi vite que 1/pmin. Ceci est étudié sous le nom de « collectionneur de coupons non uniforme » et peut être bien pire que le cas uniforme. Lorsque les coupons arrivent par pochettes (comme dans les albums d'autocollants), le problème devient une variante à tirages corrélés, analysée par des fonctions génératrices et des simulations, qui révèle que la structure des pochettes peut légèrement augmenter ou diminuer le coût total attendu selon la taille des pochettes et les règles de chevauchement.
Collectionnez les N coupons à partir de tirages aléatoires : regardez la grille se remplir, comparez les moyennes empiriques à E[T]=N·H_N et à N·ln N+γN, et observez l'histogramme des temps de complétion.
3D · Moteur de rendu Three.js / WebGL · Cible 60 FPS · fonctionne entièrement côté client, sans installation