8INF430 Algorithmes probabilistes ' 1 $ Algorithmes de Monte Carlo Fait une erreur de temps en temps mais trouve la bonne réponse avec une grande probabilité. Exemple: Vérifier un produit matriciel AB = C. fonction verif(A,B,C,n) pour j=1 à n faire X[j]= uniforme{0,1} si (XA)B=XC alors retourner vrai sinon retourner faux Temps ∈ θ(n2 ) Remarque: Cet algorithme retourne toujours la bonne réponse lorsque AB=C. & % 8INF430 ' Algorithmes probabilistes 2 $ Analyse: On suppose que AB 6= C. Soit D = AB − C 6= 0. Montrons que Pr(XD=0) ≤ 1/2 Puisque D 6= 0 alors il existe une ligne de D (disons la i−ième) qui est non nulle. • Si X et Y sont deux vecteurs identiques sauf à la i-ième position alors XD 6= Y D • Pr(XD = 0) ≤ 1/2 puisqu’on ne peut avoir XD = 0 pour les deux choix possibles de Xi & % 8INF430 Algorithmes probabilistes ' 3 $ Remarque: Le fait qu’un algorithme de MC retourne une bonne réponse avec une grande probabilité ne veut pas dire qu’il fonctionne correctement sur une majorité d’entrées. Exemple: Déterminer si un nombre est premier. fonction faux premier(n) m=2*3*5*7*11*13 si pgcd(n,m)=1 alors retourner vrai sinon retourner faux • Correct dans 80% des cas • Pour certain n, cet algorithme retourne toujours une mauvaise réponse. & % 8INF430 ' Algorithmes probabilistes 4 $ Algorithmes biaisés Définition: Soit p ∈ R t.q. 1/2 < p < 1. Un algorithme de MC est p-correct s’il retourne une bonne réponse avec une probabilité ≥ p. Définition: Un algorithme de MC est (faux) biaisé s’il est toujours correct lorsqu’il retourne faux. & % 8INF430 Algorithmes probabilistes ' 5 $ Problèmes de décision Algorithmes biaisées: Nous nous intéressons aux algorithmes dont la probabilité d’erreur est ≤ 1/2 Algorithmes non biaisées: Nous nous intéressons aux algorithmes dont la probabilité d’erreur est ≤ 1/2 − ² où ² > 0. & % 8INF430 Algorithmes probabilistes ' 6 $ Amplification déterministe Étant donné un algorithme de MC, on veut construire un algorithme ayant une probabilité d’erreur plus petite. Algorithmes biaisés Probabilité de succès p ≥ 1/2. • Répéter k fois l’algorithme. • Retourner FAUX si une des réponses est FAUX • Retourner VRAI sinon Pr(erreur) ≤ 1 2k Pr(succès) ≥ 1 − & 1 2k % 8INF430 Algorithmes probabilistes ' 7 $ Algorithmes non biaisés 1 2 Probabilité de succes: Probabilité d’erreur: 1 2 +α −α • Répéter k fois l’algorithme sur l’entrée x • Retourner VRAI si le nombre de réponses VRAI est ≥ k/2 • Retourner FAUX sinon Pr(erreur) = 1 2θ(k) Pr(succès) = 1 − & 1 2θ(k) % 8INF430 ' Algorithmes probabilistes 8 $ Test de primalité On veut déterminer si un nombre est premier. Aucun algorithme déterministe efficace connu. Fait 1: Si n est un nombre premier alors l’équation x2 ≡ 1 (mod n) a exactement deux solutions: 1 et -1 Remarque: Cela n’est pas vrai en général (12 ≡ 52 ≡ 72 ≡ 112 (mod 12)) & % 8INF430 ' Algorithmes probabilistes 9 $ Théorème [Fermat]: Si n est premier alors pour tout b ∈ {1, 2, ..., n − 1} on a bn−1 ≡ 1 (mod n) Ce théorème suggère l’algorithme suivant: fonction Fermat(n) b=uniforme(2..n-2) si ((b^(n-1) mod n) = 1) alors retourner vrai sinon retourner faux & % 8INF430 ' Algorithmes probabilistes 10 $ Fait: Il n’existe pas de 0 < p ≤ 1 tel que Fermat(n) est p-correct. Exemple 1: Si n = 561 alors il existe 318 valeurs b tel que b560 mod 561 = 1. Exemple 2: Si n = 651693055693681 alors Fermat(n) retourne une mauvaise réponse 99.9965% du temps. & % 8INF430 Algorithmes probabilistes ' 11 $ Si n est premier alors il existe s ≥ 1 et t ≥ 1 (t impair) tel que: n − 1 = 2s t Par le théorème de Fermat on a: bn−1 = b2 b s t ≡ 1 (mod n) n−1 2 = b2 n−1 2s = bt ≡ as (mod n) s−1 t ≡ a1 (mod n) .. . b Fait: Le premier ai différent de 1 doit être -1. & % 8INF430 ' Algorithmes probabilistes 12 $ Définition: Un nombre n = 2s t + 1 est fortement pseudo-premier à la base b s’il satisfait une des deux conditions suivantes: 1. bt ≡ 1 (mod n) 2. Il existe r (0 ≤ r < s) tel que b & 2r t ≡ −1 (mod n) % 8INF430 ' Algorithmes probabilistes 13 $ Fait 1: Si un nombre est premier alors il est fortement pseudo premier. Fait 2: Il existe des nombres composés qui sont fortement pseudo premier. Lemme: Si n est un nombre impair composé alors n est fortement pseudo-premier à la base b pour au plus 25% de tous les 0 < b < n. & % 8INF430 ' Algorithmes probabilistes 14 $ fonction FortementPseudoPremier(b,n) s=0; t=n-1 répéter s=s+1; t=t/2 jusqu’à (t mod 2 = 1) x=b^t mod n si (x=1 ou x=n-1) alors retourner vrai pour i=1 à s-1 faire x=x^2 mod n si (x = n-1) alors retourner vrai retourner faux & % 8INF430 ' Algorithmes probabilistes 15 $ fonction MillerRabin(n) si n=2 ou n=3 retourner vrai si n est pair retourner faux b=uniforme(2..n-2) retourner FortementPseudoPremier(b,n) & % 8INF430 ' Algorithmes probabilistes 16 $ Analyse Pr(erreur) ≤ 1/4 Algorithme biaisé. Temps: n − 1 = 2s t 1 exponentiation modulaire: O(lg t) s − 1 multiplications modulaires: O((s − 1) lg2 n) Total: O(lg3 n) & %