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 $ %