Adloun

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.