Adloun

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.