Générateur pseudo aléatoire

Transcription

Générateur pseudo aléatoire
8INF430
'
Algorithmes probabilistes
1
$
Générateur pseudo aléatoire
On suppose l’existence d’un générateur de nombres aléatoires dont
l’utilisation se fait à coût unitaire.
Définition: Soit a < b , deux nombres réels. La fonction
uniforme( a,b) retourne une valeur x choisie de façon aléatoire et
uniforme dans l’intervalle [a, b)
Définition: Si i et j sont deux entiers, alors la fonction
uniforme( a,b) retourne la valeur entière a ≤ v ≤ b avec probabilité
1/(b − a + 1)
Définition: Si S est un ensemble fini non vide, alors uniforme(S)
retourne la valeur v ∈ S avec probabilité 1/|S|
&
%
8INF430
'
Algorithmes probabilistes
2
$
Dans les années 50: Certains ordinateurs possèdent des dispositifs
apparemment aléatoires:
• compteur de particules cosmiques
• bit le moins significatif de l’horloge
Impopulaire car il devient impossible de répéter l’exécution d’un
calcul:
• Programme plus difficile à déboguer
• Comparaison de programmes plus difficile
Pour certaines applications le vrai hasard est important:
• loteries
• cryptographie
En pratique, on utilise des générateur de nombres pseudo-aléatoires.
&
%
8INF430
Algorithmes probabilistes
'
3
$
Définition: Une séquence de nombres est dite pseudo-aléatoire si
elle est générée de façon déterministe mais semble avoir été
produite de façon purement aléatoire (passe avec succès certains
tests statistiques).
Exemple: [Méthode linéaire congruentielle]
Choisir minutieusement 4 nombres:
1. m: le modulo ( m > 0)
2. a: le multiplicateur ( 0 ≤ a < m)
3. c: le saut ( 0 ≤ c < m)
4. X0 : la valeur de départ ( 0 ≤ X0 < m)
La séquence de nombre pseudo-aléatoire est:
Xn+1 = (aXn + c) mod m
&
%
8INF430
Algorithmes probabilistes
'
4
$
Implémentation de la fonction rand()
Borland C++:
GNU gcc:
Xn+1 = (22695477 ∗ Xn + 1) mod 232
Xn+1 = (69069 ∗ Xn + 5) mod 232
Visual C++:
Xn+1 = (134775813 ∗ Xn + 1) mod 232
Apple CarbonLib:
Xn+1 = (16807 ∗ Xn ) mod 231 − 1
Autres méthodes: Mersenne Twister, Blum Blum Shub, etc.
&
%
8INF430
'
Algorithmes probabilistes
5
$
Fait: La caractéristique fondamentale d’un algorithme probabiliste
est qu’il peut se comporter différemment lorsqu’appelé deux fois
avec les mêmes paramètres.
Définition: Le temps d’exécution espéré d’un algorithme
probabiliste est le temps moyen de l’algorithme sur une entrée
donnée.
Remarque: Ne pas confondre temps espéré et temps moyen.
Exemple: Quicksort prend un temps O(n2 ) en pire cas et
O(n lg n) en moyenne.
Si au début de l’algorithme, on permute aléatoirement les
éléments du tableau. Cela peut se faire en temps O(n)
Quelque soit l’entrée initiale, le temps espéré est O(n + n lg n).
&
%
8INF430
'
Algorithmes probabilistes
6
$
Classification des algorithmes probabilistes
Algorithmes numériques:
• Utilisé pour approximer la solution à des problèmes numériques
(ex. calculer π, intégration numérique, etc.).
• La précision augmente avec le temps disponible.
Algorithmes de Sherwood:
• Utilisé lorsqu’un algorithme déterministe fonctionne plus
rapidement en moyenne qu’en pire cas.
• Ces algorimes peuvent éliminer la différence entre bonnes et
mauvaises entrées.
• Exemple: quicksort
&
%
8INF430
'
Algorithmes probabilistes
7
$
Algorithmes de Las Vegas:
• Ces algorithmes peuvent quelque fois retourner un message
disant qu’ils n’ont pas pu trouver la réponse.
• La probabilité d’un echec peut être rendu arbitrairement petite
en répétant l’algorithme suffisamment souvent.
Algorithmes de Monte Carlo:
• Ces algorithmes retournent toujours une réponse mais celle-ci
n’est pas toujours juste.
• La probabilité d’obtenir une réponse correcte augmente avec le
temps disponible.
&
%
8INF430
Algorithmes probabilistes
'
8
$
Algorithmes numériques
• Calcul de π
• Calcul d’une intégrale définie
• Comptage probabiliste
&
%
8INF430
'
Algorithmes probabilistes
9
$
Calcul de π
L’expérience de Georges Louis Leclerc, Comte de Buffon, 1777:
• Aiguille de 1 cm de long
• Laisser tomber l’aiguille sur le sol
• Sol recouvert de planches de 2cm de large
Quelle est la probabilité que l’aiguille touche deux planches?
&
%
8INF430
'
Algorithmes probabilistes
10
$
Réponse: 1/π
Si on laisse tomber n aiguilles alors l’espérance du nombre
d’aiguilles qui touchent deux planches est n/π. Cela donne
l’algorithme suivant:
k=0
pour i=1 à n faire
laisser tomber une aiguille sur le sol
si l’aiguille touche 2 planches alors k=k+1
retourner n/k (puisque E[k]=n/ π)
&
%
8INF430
'
Algorithmes probabilistes
11
$
Comptage probabiliste
On veut compter le nombre de truites dans un lac.
On suppose qu’il est possible de pêcher des truites (avec remise) de
façon aléatoire, uniforme et indépendante.
On procède de la façon suivante:
répéter
capturer une truite
la peindre en rouge
la remettre dans le lac
jusqu’à ce qu’on recapture une truite rouge
Combien de fois faut-il répéter?
&
%
8INF430
Algorithmes probabilistes
'
12
$
Soit Pn,k la probabilité d’avoir une répétition lorsqu’on choisit k
éléments parmi n.
Fait: Pn,k ≈ 1 − e−k
Pn,k ≈ 1 − e
−k2 /2n
2
/2n
≥ 1/2 ⇔ e
−k2 /2n
≤ 1/2
⇔ −k 2 /2n ≤ ln(1/2)
⇔ k 2 /2n ≥ ln(2)
p
√
⇔ k ≥ 2 ln(2) n
√
Remarque: Cela indique qu’après avoir choisi k = d1.177 ne
éléments, la probabilité d’avoir une répétition dépasse 50%.
p
Fait: Lorsque n → ∞ on a E(k) = πn/2 et E(k 2 ) = 2n
&
%
8INF430
Algorithmes probabilistes
'
Fait: Lorsque n → ∞ on a E(k) =
13
$
p
πn/2 et E(k 2 ) = 2n
fonction compter(S)
k=0
T =∅
a=uniforme(S)
Tantque a ∈
/ T faire
k =k+1
T = T ∪ {a}
a=uniforme(S)
retourner k 2 /2
&
%
8INF430
Algorithmes probabilistes
'
14
$
Algorithmes de Sherwood
Exemple: Quicksort:
procédure Pquicksort(T[1..n])
mélanger(T[1..n])
quicksort(T[1..n])
procédure mélanger(T[1..n])
pour i=1 à n-1 faire
j=uniform(i,n)
échanger T[i] et T[j]
Temps espéré: O(n + n lg n) = O(n lg n)
&
%
8INF430
'
Algorithmes probabilistes
15
$
Hachage universel
On veut mettre en mémoire un petit nombre d’éléments (disons n)
provenant d’un grand ensemble X.
Exemple: Table des symboles d’un compilateur, mémorisation
d’adresses IP, etc.
On veut un accès très rapide à ces éléments: O(1)
Adressage direct: Espace O(|X|).
Liste chaı̂née: Temps de recherche O(n).
Table de hachage: Espace O(n), temps de recherche O(?)
&
%
8INF430
'
Algorithmes probabilistes
16
$
Fonction de hachage
Définition: Soit N > 0. Une fonction de hachage est une fonction
de la forme
h : X → {0, 1, ..., N − 1}
Exemple: h(k) = k MOD N
Définition: Une collision se produit lorsque a 6= b et h(a) = h(b).
Une solution pour résoudre ce problème consiste à utiliser une table
de listes.
Fait: Si a et b sont choisit de façon aléatoire et uniforme dans X
alors la probabilité d’une collision est 1/N .
&
%
8INF430
'
Algorithmes probabilistes
17
$
Fait: Aucune fonction de hachage n’est parfaite.
Idée: La fonction de hachage n’est pas fixé mais choisit
aléatoirement parmi un ensemble de fonctions.
• Le nombre de fonctions f : X → {0, .., N − 1} est N |X| .
• Si f est choisit de façon uniforme alors pour a 6= b on a
Pr(f (a) = f (b)) = N1
• En pratique, il n’est pas possible de choisir aléatoirement une
fonction f : X → {1, .., N } car N |X| est trop grand.
On doit donc restreindre l’ensemble des fonctions possibles.
&
%
8INF430
'
Algorithmes probabilistes
18
$
Classe universelle de fonctions
Soit H une classe de fonctions X → {0, .., N − 1} et soit h ∈ H une
fonction dans H choisit de façon aléatoire et uniforme.
Alors H est une classe universelle de fonctions si pour tout a 6= b
dans X on a:
1
Pr(h(a) = h(b)) =
n
&
%
8INF430
'
Algorithmes probabilistes
19
$
Exemple 1
Un certain service Web nécessite de mémoriser l’adresse IP des
client actifs.
• X est l’ensemble de toutes les adresses IP possibles
• Chaque adresse x ∈ X est de la forme x = (x1 , x2 , x3 , x4 ) où les
xi ont 8 bits (ex. x = 132.212.11.75 )
• On utilise une table de hachage de n = 257 entrées
(n peut être n’importe quel nombre premier).
&
%
8INF430
'
Algorithmes probabilistes
20
$
On choisit les paramètres suivants:
• a = (a1 , a2 , a3 , a4 ) ∈ {0, . . . , n − 1}4
• ha : X → {0, . . . , n − 1}
• ha (x) = (a1 x1 + a2 x2 + a3 x3 + a4 x4 ) mod n
• H = {ha | a ∈ {0, . . . , n − 1}4 }
Fait: H est une classe universelle de fonctions
&
%
8INF430
Algorithmes probabilistes
'
21
$
Preuve: On doit montrer que si x 6= y sont deux éléments de X
alors
1
Pr(ha (x) = ha (y)) =
n
Supposons que x4 6= y4 et que ha (x) = ha (y). On a
3
X
ai (xi − yi ) = a4 (y4 − x4 ) (mod n)
i=1
Si la partie de gauche vaut c alors on doit avoir
a4 = c(y4 − x4 )−1
La probabilité que cela se produise est 1/n
&
%
8INF430
'
Algorithmes probabilistes
22
$
Exemple 2
On défini hm,n : X → {0, 1, .., N − 1} de la façon suivante:
• p > |X|, un nombre premier
• m et n, deux entiers < p
• hm,n (x) = (mx + n mod p) mod N
H = {hn,m | m, n < p}
Fait: H est une classe universelle de fonctions
&
%
8INF430
Algorithmes probabilistes
'
23
$
Preuve: Soit x, y ∈ X tels que x 6= y.
Question: Combien y a-t-il de fonctions dans H telles que
h(x) = h(y)?
Réponse: il y a au plus
n.
p(p−1)
N
choix possibles pour la paire m et
1. ≤ p possibilités pour n
2. ≤
&
p−1
N
possibilités pour m
%
8INF430
'
Algorithmes probabilistes
24
$
1.
h(x) = h(y)
(mx + n mod p) mod N = (my + n mod p) mod N
(m(x − y) mod p) mod N = 0
=⇒ p possibilités pour n
&
%
8INF430
Algorithmes probabilistes
'
25
$
2.
Puisque 1 ≤ m < p et 0 ≤ x, y < |X| − 1 et x 6= y alors
m(x − y) mod p 6= 0
m(x − y) = ap + b où 0 < b < p
(m(x − y) mod p) mod N = b mod N = 0
On a donc b ∈ {N, 2N, · · · , b p−1
N cN }
Fait: Pour chaque b il y a exactement une valeur de m telle que
m(x − y) mod p = b.
=⇒ ≤
&
p−1
N
possibilités pour m
%
8INF430
Algorithmes probabilistes
'
Il y a donc au plus
p(p−1)
N
26
$
fonctions h ∈ H telles que h(x) = h(y).
De plus, il y a p(p − 1) fonctions dans H = {hm,n | 1 ≤ m < p et
0 ≤ n < p}.
La probalilité d’avoir une collision est donc au plus:
p(p−1)
N
p(p−1)
=
1
N
Ce qui démontre que H est une classe universelle de fonctions.
&
%
8INF430
'
&
Algorithmes probabilistes
27
$
%
8INF430
'
&
Algorithmes probabilistes
28
$
%
8INF430
'
&
Algorithmes probabilistes
29
$
%

Documents pareils