Echantillonnage et algorithme
On a programmé une fonction nommée hasard(), censée retourner le nombre dans 50% des cas et le nombre dans les autres cas.
Pour tester cette fonction, on utilise un programme basé sur l'algorithme suivant :
variable
somme: nombre
début algorithme
// initialisation
somme ← 0
// traitement
pour i variant de 1 à 10 000
somme ← somme + hasard()
fin pour
// sortie
écrire "Le nombre 1 a été généré " somme " fois"
fin algorithme
Expliquer le fonctionnement de l'algorithme ci-dessus.
L'exécution de l'algorithme retourne le message "Le nombre 1 a été généré 4947 fois". Peut-on en déduire une anomalie pour la fonction hasard()?
Corrigé
somme ← 0 : initialise la variable somme à 0.
pour i variant de 1 à 10 000 : on effectue une boucle 10 000 fois.
somme ← somme + hasard() : on ajoute le résultat de la fonction hasard() à la variable somme.
La variable somme ne sera pas modifiée si hasard() renvoie zéro. Elle sera incrémentée de 1 lorsque hasard() retourne 1.
La variable somme va donc compter le nombre de fois où la fonction hasard() retourne "1".
écrire "Le nombre 1 a été généré" somme "fois" : On affiche le résultat stocké dans la variable somme.
Si la fonction hasard() fonctionne correctement, le nombre affiché devrait avoisiner
On souhaite que la proportion de chiffres "1" retournés avoisine les 50% (soit une proportion de 0,5).
L'algorithme effectue 10 000 tests de la fonction hasard().
On a bien : et
L'intervalle de fluctuation au seuil de 0,95 est donc :
Le message retourné par l'algorithme indique une proportion de résultats "1" égale à
.
Ce nombre appartient bien à l'intervalle .
Aucune anomalie n'a donc été détectée par l'algorithme.