]> AND Private Git Repository - hdrcouchot.git/blob - talk/q9.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
la veille
[hdrcouchot.git] / talk / q9.tex
1 Supposons qu'on dispose d'une fonction qui génère un nombre pseudo-aléatoire
2 dont la sortie $j$ est uniformément distribuée sur l'intervalle $[0,1[$. 
3 Comment peut-on faire 
4 pour disposer d'une sortie uniformément distribuée sur l'ensemble des entiers 
5 $\{0,\dots, m\}$.
6
7 Réponse: On commence par diviser $[0,1[$ en $m+1$ intervalles de même 
8 longueurs: 
9 $I_0= [0, \dfrac{1}{m+1}[$, 
10 $I_1= [\dfrac{1}{m+1}, \dfrac{2}{m+1} [$, \ldots 
11 $I_m = [\dfrac{m}{m+1}, 1[$. 
12 Si la sortie $j$ appartient à $I_0$, on retourne 0,\ldots. 
13
14 Ceci revient à d'abord multiplier $j$ par $m+1$ et à prendre ensuite sa partie entière, ce qui est fait dans le code Python suivant.
15 La fonction Python \verb+randint(a,b)+ génère un entier 
16 entre $a$ et $b$, les deux nombres compris.  
17
18 \begin{lstlisting}
19 def genereAleaEntier(m):
20   j= random()
21   return int(j*(m+1))
22 \end{lstlisting}