Le collectionneur de vignettes
Exercice · niveau 3 (difficile) · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Simulation et données
Énoncé
Chaque paquet contient une vignette tirée au hasard parmi , indépendamment des autres. Simuler le nombre d'achats nécessaires pour posséder les vignettes et comparer sa moyenne à pour .
Corrigé
import numpy.random as rd
def collection(n):
vues = [False] * n
restant, achats = n, 0
while restant > 0:
v = rd.randint(0, n) # entier de 0 a n-1
achats = achats + 1
if not vues[v]:
vues[v] = True
restant = restant - 1
return achats
n = 50
X = [collection(n) for _ in range(10000)]
print(sum(X) / len(X)) # ~225
print(n * sum(1 / k for k in range(1, n + 1))) # 224.96
Le calcul exact. Découpons l'attente. Quand on possède déjà vignettes distinctes, chaque paquet apporte une nouveauté avec la probabilité , et les paquets sont indépendants : le nombre de paquets à acheter pour passer de à vignettes suit donc une loi géométrique de paramètre , d'espérance .
Comme , la linéarité de l'espérance — qui ne réclame aucune hypothèse d'indépendance — donne
Pour : , donc . La moyenne simulée s'en approche à moins de .
Le point à retenir. Cette somme est la somme partielle de la série harmonique, qui diverge : le coût par vignette augmente sans cesse. Pour on trouve , soit fois plus pour deux fois plus de vignettes. Doubler la collection coûte plus du double — et c'est le chapitre sur les séries qui le dit.
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.