(b) demande à H de choisir entre la porte de droite et la porte de gauche (si l’utilisateur
choisi la porte de gauche, il se trouve dans la salle d’attente et s’il choisi la porte de
droite, il se trouve dans la salle d’opération).
(c) communique à H sa situation (salle d’attente ou salle d’opération) avec dans le deuxième
cas le message suivant : sortez vite !
3. Le problème de Syracuse : on part d’un nombre entier plus grand que zéro ; s’il est pair, on
le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1. En répétant l’opération,
on obtient une suite d’entiers positifs dont chacun ne dépend que de son prédécesseur.
La conjecture de Syracuse, encore appelée conjecture de Collatz, conjecture d’Ulam, con-
jecture tchèque ou problème 3x+1 est l’hypothèse mathématique selon laquelle la suite de
Syracuse de n’importe quel entier strictement positif atteint 1. Après que le nombre 1 a été
atteint, la suite des valeurs (1,4,2,1,4,2. . . ) se répète indéfiniment en un cycle de longueur 3,
appelé cycle trivial.
En dépit de la simplicité de son énoncé, cette conjecture défie depuis de nombreuses années les
mathématiciens. Paul Erdős a dit à propos de la conjecture de Syracuse : « les mathématiques
ne sont pas encore prêtes pour de tels problèmes ». Faisons alors un peu d’algorithmique.
(a) Ecrire une fonction syracuse(entier) qui retourne la suite de Syracuse de entier.
(b) La carte d’identité d’un entier est définie par sa trajectoire (i.e. sa suite de Syracuse), sa
durée de vol (le nombre d’entier avant d’atteindre 1), et son altitude (l’entier maximal
dans sa trajectoire). Proposer une procedure qui affiche une telle carte, et trace la
trajectoire. Pour cela, importer le module pylab et utiliser la fonction plot(), puis show().
(c) ?Ecrire une fonction tri(liste) qui tri une liste d’entier par altitude décroissante.
4. On va faire un peu de statistique avec le module random :
(a) Importer le module random puis générer un échantillon gaussien N(µ, σ2)de taille n=
100 avec µ= 10 et σ= 2 grâce à la fonction gauss().
(b) Ecrire une fonction moyenne(data), puis une fonction variance(data) et ecarttype(data)
qui calcule la moyenne/variance/écart type d’un échantillon data. Utiliser les listes en
compréhension.
(c) On va tester le générateur aléatoire d’un échantillon gaussien sous Python. Pour cela,
on rappelle une propriété essentielle de l’estimateur de la variance S2
n: si X1, . . . , Xnest
un échantillon i.i.d. de loi N(µ, σ2), alors l’estimateur de la variance :
S2
n:= 1
n
n
X
i=1
(Xi−¯
Xn)2
a pour espérance (n−1)σ2/n.
i. Créer M= 10000 échantillon gaussien de taille n= 5 de moyenne µ= 4 et de
variance σ2= 2.
ii. Calculer une estimation de l’espérance de la variance empirique grâce aux M=
10000 échantillons. Retrouve-t-on la propriété décrite ci-dessus ?
(d) Sur les 100 000 électeurs d’une ville, 45700 s’apprêtent à voter pour le maire sortant, mais
celui-ci ne le sait pas. Alors il commande un sondage, et l’institut de sondage constitue
un échantillon de 100 habitants sur lesquels 52 disent vouloir voter pour le maire. Fou
de joie, celui-ci achète le champagne pendant la campagne, avant les élections, et se fait
battre lors des élections. Il accuse l’institut de sondage d’avoir triché.
i. Construisez une liste de "pour" et de "contre" représentant les 100000 électeurs de
la ville en question à l’aide de la fonction shuffle.
ii. Estimer la probabilité que sur un échantillon de taille 100, la majorité des électeurs
votent en faveur du maire sortant.
iii. Répéter le processus pour un échantillon de taille 1000.
3