Le collectionneur de vignettes
Exercice · niveau 3 (difficile) · mathématiques approfondies (ECG 1re année), chapitre 11 — Informatique et algorithmique · Simuler une loi, estimer une probabilité
Énoncé
Chaque paquet contient une vignette tirée au hasard parmi , indépendamment des autres. Simuler le nombre de paquets nécessaires pour posséder les vignettes, pour , et comparer la moyenne empirique à calculée exactement.
Corrigé
import numpy as np
import numpy.random as rd
def collecte(n):
vues = np.zeros(n) # vues[i] = 1 des que la vignette i est obtenue
nb, paquets = 0, 0
while nb < n:
v = rd.randint(0, n)
paquets = paquets + 1
if vues[v] == 0:
vues[v] = 1
nb = nb + 1
return paquets
n, N = 10, 20000
s = 0
for r in range(N):
s = s + collecte(n)
print(s / N, n * sum(1 / k for k in range(1, n + 1)))
Le calcul exact. Décomposons , où est le nombre de paquets ouverts pour passer de à vignettes distinctes. Quand on en possède déjà , chaque paquet apporte une nouveauté avec la probabilité , indépendamment des précédents : est le rang du premier succès, donc et .
La linéarité de l'espérance — qui n'exige aucune indépendance — recolle le tout :
Pour : .
L'accord. La simulation rend environ sur répétitions.
Le point à retenir. Décomposer une attente en une somme d'attentes géométriques est la méthode : chaque étape est sans mémoire, donc géométrique, et la linéarité fait le reste. On y lit aussi la croissance en : collectionner vignettes coûte en moyenne paquets, pas .
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.