Algorithmes de Monte Carlo

publicité
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)
&
%
Téléchargement