Académique Documents
Professionnel Documents
Culture Documents
v
v
v
Introduccin
Clasificacin de los algoritmos
probabilistas
Algoritmos numricos
La aguja de Buffon
Integracin probabilista
J. Campos - C.P.S.
2
9
13
14
16
21
23
33
50
61
65
Pg. 1
Algoritmos probabilistas:
Introduccin
v
5 das
5 das
J. Campos - C.P.S.
Pg. 2
Algoritmos probabilistas:
Introduccin
Si me quedo 4 das ms en O hasta resolver el
misterio, podr llegar al tesoro en 9 das, y
obtener x-9y lingotes.
Si acepto el trato con el elfo, llego al tesoro en 5
das, encuentro all x-5y lingotes de los cuales
debo pagar 3y al elfo, y obtengo x-8y lingotes.
Es mejor aceptar el trato pero
hay una solucin mejor!
Cul?
J. Campos - C.P.S.
Pg. 3
Algoritmos probabilistas:
Introduccin
Usar el dobln que me queda en el bolsillo!
Lo lanzo al aire para decidir a qu lugar voy
primero (A o B).
u
J. Campos - C.P.S.
Pg. 4
Algoritmos probabilistas:
Introduccin
v
Qu hemos aprendido?
En algunos algoritmos en los que aparece una
decisin, es preferible a veces elegir
aleatoriamente antes que perder tiempo
calculando qu alternativa es la mejor.
Esto ocurre si el tiempo requerido para
determinar la eleccin ptima es demasiado
frente al promedio obtenido tomando la decisin
al azar.
Caracterstica fundamental
de un algoritmo probabilista:
el mismo algoritmo
puede comportarse de
distinta forma aplicado
a los mismos datos
J. Campos - C.P.S.
Pg. 5
Algoritmos probabilistas:
Introduccin
v
J. Campos - C.P.S.
Pg. 6
Algoritmos probabilistas:
Introduccin
v
Ms diferencias:
A un algoritmo determinista no se le permite que
calcule una solucin incorrecta para ningn dato.
Un algoritmo probabilista puede equivocarse
siempre que esto ocurra con una probabilidad
pequea para cada dato de entrada.
u Repitiendo la ejecucin un nmero
suficiente de veces para el mismo dato,
puede aumentarse tanto como se quiera el
grado de confianza en obtener la solucin
correcta.
J. Campos - C.P.S.
Pg. 7
Algoritmos probabilistas:
Introduccin
v
J. Campos - C.P.S.
Pg. 8
Algoritmos probabilistas:
Clasificacin
Algoritmos probabilistas
Algoritmos numricos:
Pg. 9
Algoritmos probabilistas:
Clasificacin
v
J. Campos - C.P.S.
Pg. 10
Algoritmos probabilistas:
Clasificacin
Cundo descubri Amrica Cristobal Coln?
Algoritmo de Monte Carlo ejecutado diez veces:
1492, 1492, 1492, 1491, 1492, 1492, 357 A.C., 1492,
1492, 1492.
De nuevo un 20% de error.
Ese porcentaje puede reducirse dando ms
tiempo para la ejecucin.
Las respuestas incorrectas pueden ser
prximas a la correcta o completamente
desviadas.
J. Campos - C.P.S.
Pg. 11
Algoritmos probabilistas:
Clasificacin
Cundo descubri Amrica Cristobal Coln?
Algoritmo de Las Vegas ejecutado diez veces:
1492, 1492, Perdn!, 1492, 1492, 1492, 1492, 1492,
Perdn!, 1492.
El algoritmo nunca da una respuesta incorrecta.
El algoritmo falla con una cierta probabilidad
(20% en este caso).
J. Campos - C.P.S.
Pg. 12
Algoritmos numricos:
Introduccin
v
Primeros en aparecer
SGM, clave Monte Carlo
Un ejemplo ya conocido:
Simulacin de un sistema de espera (cola)
u Estimar el tiempo medio de espera en el
sistema.
u En muchos casos la solucin exacta no es
posible.
J. Campos - C.P.S.
Pg. 13
Algoritmos numricos:
La aguja de Buffon
G.L. Leclerc, Conde de Buffon:
Essai darithmtique morale, 1777.
v
Teorema de Buffon:
Si se tira una aguja de
longitud a un suelo
hecho con tiras de madera
de anchura (), la
probabilidad de que
la aguja toque ms de
una tira de madera es
p=2/p.
Aplicacin:
Si =/2, entonces p=1/p.
Si se tira la aguja un nmero de veces n
suficientemente grande y se cuenta el nmero k
de veces que la aguja toca ms de una tira de
madera, se puede estimar el valor de p:
kn/p pn/k
Es (probablemente) el primer algoritmo
probabilista de la historia.
J. Campos - C.P.S.
Pg. 14
Algoritmos numricos:
La aguja de Buffon
v
J. Campos - C.P.S.
Pg. 15
Algoritmos numricos:
Integracin probabilista
v
Problema:
Calcular:
I=
I
b a
J. Campos - C.P.S.
Pg. 16
Algoritmos numricos:
Integracin probabilista
funcin
funcin int_prob(f:funcin;
int_prob(f:funcin; n:entero;
n:entero;
a,b:real)
a,b:real) devuelve
devuelve real
real
{Algoritmo
{Algoritmo probabilista
probabilista que
que estima
estima la
la integral
integral
de
f
entre
a
y
b
generando
n
valores
aleatorios
de f entre a y b generando n valores aleatorios
xxi en
[a,b), haciendo la media de los f(xi) y
i en [a,b), haciendo la media de los f(xi) y
multiplicando
multiplicando el
el resultado
resultado por
por (b-a).
(b-a).
Se
utiliza
la
funcin
uniforme(u,v)
Se utiliza la funcin uniforme(u,v) que
que genera
genera
un
nmero
pseudo-aleatorio
uniformemente
un nmero pseudo-aleatorio uniformemente
distribuido
distribuido en
en [u,v).}
[u,v).}
variables
variables suma,x:real;
suma,x:real; i:entero
i:entero
principio
principio
suma:=0.0;
suma:=0.0;
para
para i:=1
i:=1 hasta
hasta nn hacer
hacer
x:=uniforme(a,b);
x:=uniforme(a,b);
suma:=suma+f(x)
suma:=suma+f(x)
fpara;
fpara;
devuelve
devuelve (b-a)*(suma/n)
(b-a)*(suma/n)
fin
fin
J. Campos - C.P.S.
Pg. 17
Algoritmos numricos:
Integracin probabilista
v
Anlisis de la convergencia:
Puede verse [BB96] que la varianza del estimador
calculado por la funcin anterior es inversamente
proporcional al nmero n de muestras generadas
y que la distribucin del estimador es
aproximadamente normal, cuando n es grande.
Por tanto, el error esperado es inversamente
proporcional a n .
u
J. Campos - C.P.S.
Pg. 18
Algoritmos numricos:
Integracin probabilista
v
La versin determinista:
Es similar pero estima la altura media a partir de
puntos equidistantes.
funcin
funcin int_det(f:funcin;
int_det(f:funcin; n:entero;
n:entero;
a,b:real)
a,b:real) devuelve
devuelve real
real
variables
variables suma,x:real;
suma,x:real; i:entero
i:entero
principio
principio
suma:=0.0;
suma:=0.0; delta:=(b-a)/n;
delta:=(b-a)/n; x:=a+delta/2;
x:=a+delta/2;
para
para i:=1
i:=1 hasta
hasta nn hacer
hacer
suma:=suma+f(x);
suma:=suma+f(x);
x:=x+delta
x:=x+delta
fpara;
fpara;
devuelve
devuelve suma*delta
suma*delta
fin
fin
J. Campos - C.P.S.
Pg. 19
Algoritmos numricos:
Integracin probabilista
En general, la versin determinista es ms
eficiente (menos iteraciones para obtener
precisin similar).
Pero, para todo algoritmo determinista de
integracin puede construirse una funcin que
lo vuelve loco
(no as para la versin probabilista).
J. Campos - C.P.S.
Pg. 20
J. Campos - C.P.S.
Pg. 21
J. Campos - C.P.S.
Pg. 22
Problema:
Dadas tres matrices nn, A, B y C, se trata de
verificar si C = AB.
Solucin trivial:
Multiplicar A por B con:
u
J. Campos - C.P.S.
Pg. 23
r
Di 0.
i S
Sea
{}
{}
S i , si i S
S =
S \ i , si i S
J. Campos - C.P.S.
Pg. 24
J. Campos - C.P.S.
Pg. 25
J. Campos - C.P.S.
Pg. 26
La clave:
Siempre que Freivalds(A,B,C) devuelve
falso, podemos estar seguros de que AB C.
Slo cuando devuelve verdad, no sabemos la
respuesta.
J. Campos - C.P.S.
Pg. 27
k
and
distinto
mq ik and distinto hacer
hacer
si
si freivalds(A,B,C)
freivalds(A,B,C)
entonces
entonces i:=i+1
i:=i+1
sino
sino distinto:=falso
distinto:=falso
fsi
fsi
fmq;
fmq;
devuelve
devuelve distinto
distinto
fin
fin
J. Campos - C.P.S.
Pg. 28
J. Campos - C.P.S.
Pg. 29
el decrecimiento de la
probabilidad de error es
espectacular repitiendo
la prueba varias veces.
J. Campos - C.P.S.
Pg. 30
J. Campos - C.P.S.
Pg. 31
Inters prctico:
Se necesitan 3n2 multiplicaciones escalares para
calcular XAB y XC, frente a las n3 necesarias para
calcular AB.
u Si exigimos epsilon=10-6, y es cierto que
AB = C, se requieren 20 ejecuciones de
Freivalds, es decir, 60n2 multiplicaciones
escalares, y eso slo es mejor que n3 si n>60.
Limitado a matrices de dimensin grande.
J. Campos - C.P.S.
Pg. 32
J. Campos - C.P.S.
Pg. 33
J. Campos - C.P.S.
Pg. 34
J. Campos - C.P.S.
Pg. 35
funcin
funcin Fermat(n:entero)
Fermat(n:entero) devuelve
devuelve booleano
booleano
variable
variable a:entero
a:entero
principio
principio
a:=uniforme_entero(1,n-1);
a:=uniforme_entero(1,n-1);
n-1
si
si aan-1 mod
mod n=1
n=1
entonces
entonces devuelve
devuelve verdad
verdad
sino
sino devuelve
devuelve falso
falso
fsi
fsi
fin
fin
J. Campos - C.P.S.
Pg. 36
variable
variable i,x,r:entero
i,x,r:entero
principio
principio
i:=n;
i:=n; x:=a;
x:=a; r:=1;
r:=1;
mq
mq i>0
i>0 hacer
hacer
si
si ii es
es impar
impar entonces
entonces r:=r*x
r:=r*x mod
mod zz fsi;
fsi;
x:=x*x
x:=x*x mod
mod z;
z;
i:=i
i:=i div
div 22
fmq;
fmq;
devuelve
devuelve rr
fin
fin
J. Campos - C.P.S.
Pg. 37
J. Campos - C.P.S.
Pg. 38
Definicin:
Falso testigo de primalidad.
Dado un entero n que no sea primo, un entero a
tal que 2an-2 se llama falso testigo de
primalidad de n si an-1 mod n =1.
u Ejemplo: 4 es un falso test. de prim. para 15.
J. Campos - C.P.S.
Pg. 39
Dos noticias:
Una buena y una mala
J. Campos - C.P.S.
Algoritmo de Fermat
modificado?
Es pcorrecto?
Pg. 40
La buena noticia:
Hay pocos testigos falsos de primalidad.
Si bien slo 5 de los 332 nmeros impares no
primos menores que 1000 carecen de falsos
testigos de primalidad:
u
J. Campos - C.P.S.
Pg. 41
La mala noticia:
Hay nmeros no primos que admiten muchos
falsos testigos de primalidad.
Recordar la caracterstica fundamental de un
algoritmo de Monte Carlo:
Con una alta probabilidad encuentra una
solucin correcta sea cual sea la entrada.
Por ejemplo, 561 admite 318 falsos testigos.
Otro ejemplo peor:
Fermat(651693055693681) devuelve verdad con
probabilidad mayor que 0999965 y sin embargo
ese nmero no es primo.
Puede demostrarse que el algoritmo de Fermat
no es pcorrecto para ningn p>0.
u Por tanto la probabilidad de error no puede
disminuirse mediante repeticiones
independientes del algoritmo.
J. Campos - C.P.S.
Pg. 42
Una solucin:
J. Campos - C.P.S.
Pg. 43
J. Campos - C.P.S.
Pg. 44
funcin
funcin B(a,n:entero)
B(a,n:entero) devuelve
devuelve booleano
booleano
{Pre:
{Pre: nn es
es impar
impar yy 2an-2}
2an-2}
{Post:
B(n)
{Post: B(a,n)=verdad
B(a,n)=verdad
aa verifica
verifica
B(n) para
para algn
algn
s
valor
de
s
y
t
tales
que
n-1=2
t
con
t
impar}
valor de s y t tales que n-1=2st con t impar}
variables
variables s,t,x,i:entero;
s,t,x,i:entero; parar:booleano
parar:booleano
principio
principio
s:=0;
s:=0; t:=n-1;
t:=n-1;
repetir
repetir
s:=s+1;
s:=s+1; t:=t
t:=t div
div 22
hastaQue
hastaQue tt mod
mod 2=1;
2=1;
t
x:=a
x:=at mod
mod n;
n; {se
{se puede
puede calcular
calcular con
con expdIter}
expdIter}
si
x=1
or
x=n-1
entonces
devuelve
verdad
si x=1 or x=n-1 entonces devuelve verdad
sino
sino
i:=1;
i:=1; parar:=falso;
parar:=falso;
mq
mq iis-1
s-1 and
and not
not parar
parar hacer
hacer
x:=x*x
x:=x*x mod
mod n;
n;
si
x=n-1
si x=n-1
entonces
entonces parar:=verdad
parar:=verdad
sino
sino i:=i+1
i:=i+1
fsi
fsi
fmq;
fmq;
devuelve
devuelve parar
parar
fsi
fsi
fin
fin
J. Campos - C.P.S.
Pg. 45
variable
variable a:entero
a:entero
principio
principio
a:=uniforme_entero(2,n-2);
a:=uniforme_entero(2,n-2);
devuelve
devuelve B(a,n)
B(a,n)
fin
fin
Como con el algoritmo Fermat, si la funcin
devuelve falso, es seguro que el nmero no es
primo (por la extensin del teorema de Fermat).
Y si devuelve verdad?
El algoritmo puede fallar slo para nmeros
pseudoprimos en el sentido fuerte (cuando elige
como a un falso testigo de primalidad para n en
el sentido fuerte).
J. Campos - C.P.S.
Pg. 46
J. Campos - C.P.S.
Pg. 47
Y lo ms importante:
La proporcin de falsos testigos de primalidad
(en el s fuerte) es pequea para todo impar no
primo.
Teorema.
Sea n un entero impar mayor que 4.
u Si n es primo, entonces B(n)=verdad para
todo a tal que 2an-2.
u Si n es compuesto, entonces
{a | 2 a n 2 B(n) = verdad para a} (n 9) 4.
Corolario.
La funcin Miller_Rabin siempre devuelve el
valor verdad cuando n es primo.
Si n es un impar no primo, la funcin
Miller_Rabin devuelve falso con una
probabilidad mayor o igual que 3/4.
Es decir, Miller_Rabin es un algoritmo 3/4
correcto para comprobar la primalidad.
J. Campos - C.P.S.
Pg. 48
variables
variables i:entero;
i:entero; distinto:booleano
distinto:booleano
principio
principio
distinto:=verdad;
distinto:=verdad; i:=1;
i:=1;
mq
mq iikk and
and distinto
distinto hacer
hacer
si
Miller_Rabin(n)
si Miller_Rabin(n)
entonces
entonces i:=i+1
i:=i+1
sino
sino distinto:=falso
distinto:=falso
fsi
fsi
fmq;
fmq;
devuelve
devuelve distinto
distinto
fin
fin
Es un algoritmo de Monte Carlo (1-4-k)correcto.
Por ejemplo, si k=10 la probabilidad de error es
menor que una millonsima.
Coste con cota de probabilidad de error :
O(log3n log 1/ ).
(Es razonable para nos de mil cifras con <10-100.)
J. Campos - C.P.S.
Pg. 49
J. Campos - C.P.S.
Pg. 50
J. Campos - C.P.S.
Pg. 51
J. Campos - C.P.S.
Pg. 52
J. Campos - C.P.S.
Pg. 53
algoritmo
algoritmo LV(ent
LV(ent x:tpx;
x:tpx; sal
sal s:tpsolucin;
s:tpsolucin;
sal
xito:booleano)
sal xito:booleano)
{xito
{xito devuelve
devuelve verdad
verdad si
si LV
LV encuentra
encuentra la
la solucin
solucin
yy en
ese
caso
s
devuelve
la
solucin
encontrada}
en ese caso s devuelve la solucin encontrada}
u
J. Campos - C.P.S.
Pg. 54
)(
J. Campos - C.P.S.
1 p(x)
f (x)
p(x)
Pg. 55
1 p (x )
f (x )
p(x )
J. Campos - C.P.S.
Pg. 56
J. Campos - C.P.S.
Pg. 57
n al azar
0
1
2
3
4
5
6
7
8
J. Campos - C.P.S.
p
1,0000
1,0000
0,8750
0,4931
0,2618
0,1624
0,1357
0,1293
0,1293
114,00
39,63
22,53
13,48
10,31
9,33
9,05
9,00
9,00
39,67
15,10
8,79
7,29
6,98
6,97
6,97
114,00
39,63
28,20
29,01
35,10
46,92
53,50
55,93
55,93
Pg. 58
REAL
114,00
39,63
22,53
13,48
10,31
9,33
9,05
9,00
9,00
39,67
15,10
8,79
7,29
6,98
6,97
6,97
114,00
39,63
28,20
29,01
35,10
46,92
53,50
55,93
55,93
0,45 ms
p
1,0000
1,0000
0,8750
0,4931
0,2618
0,1624
0,1357
0,1293
0,1293
0,14 ms
0,21 ms
1 ms
J. Campos - C.P.S.
Pg. 59
J. Campos - C.P.S.
Pg. 60
algoritmo
algoritmo ordRpida(e/s
ordRpida(e/s T:vect[1..n]de
T:vect[1..n]de dato;
dato;
ent
ent i,d:1..n)
i,d:1..n)
{Ordenacin
{Ordenacin de
de las
las componentes
componentes i..d
i..d de
de T.}
T.}
variable
variable p:dato;
p:dato; m:1..n
m:1..n
principio
principio
si
si d-i
d-i es
es pequeo
pequeo
entonces
entonces ordInsercin(T,i,d)
ordInsercin(T,i,d)
sino
sino
p:=T[i];
p:=T[i]; {{pp se
se llama
llama pivote}
pivote}
divide(T,i,d,p,m);
divide(T,i,d,p,m);
{ik<mT[k]T[m]=p
{ik<mT[k]T[m]=p m<kdT[k]>T[m]}
m<kdT[k]>T[m]}
ordRpida(T,i,m-1);
ordRpida(T,i,m-1);
ordRpida(T,m+1,d)
ordRpida(T,m+1,d)
fsi
fsi
fin
fin
Coste promedio: O(nlog n)
Coste peor: (n2)
J. Campos - C.P.S.
Pg. 61
variables
variables k:1..n
k:1..n
principio
principio
k:=i;
k:=i; m:=d+1;
m:=d+1;
repetir
repetir k:=k+1
k:=k+1 hasta
hasta que
que (T[k]>p)or(k
(T[k]>p)or(kd);
d);
repetir
repetir m:=m-1
m:=m-1 hasta
hasta que
que (T[m]
(T[m]p);
p);
mq
k<m
hace
mq k<m hace
intercambiar(T[k],T[m]);
intercambiar(T[k],T[m]);
repetir
repetir k:=k+1
k:=k+1 hasta
hasta que
que T[k]>p;
T[k]>p;
repetir
repetir m:=m-1
m:=m-1 hasta
hasta que
que T[m]
T[m]pp
fmq;
fmq;
intercambiar(T[i],T[m])
intercambiar(T[i],T[m])
fin
fin
J. Campos - C.P.S.
Pg. 62
variable
variable m:1..n
m:1..n
principio
principio
si
si d-i
d-i es
es pequeo
pequeo
entonces
entonces ordInsercin(T,i,d)
ordInsercin(T,i,d)
sino
sino
p:=T[i];
p:=T[i]; {pivote}
{pivote}
divideBis(T,i,d,p,m,r);
divideBis(T,i,d,p,m,r);
{m+1kr-1T[k]=p
{m+1kr-1T[k]=p ikmT[k]<p
ikmT[k]<p
mkdT[k]>p}
mkdT[k]>p}
ordRpida(T,i,m);
ordRpida(T,i,m);
ordRpida(T,r,d)
ordRpida(T,r,d)
fsi
fsi
fin
fin
J. Campos - C.P.S.
Pg. 63
variable
variable m:1..n
m:1..n
principio
principio
si
si d-i
d-i es
es pequeo
pequeo
entonces
entonces ordInsercin(T,i,d)
ordInsercin(T,i,d)
sino
sino
p:=T[uniforme_entero(i,d)];
p:=T[uniforme_entero(i,d)]; {pivote}
{pivote}
divideBis(T,i,d,p,m,r);
divideBis(T,i,d,p,m,r);
{m+1kr-1T[k]=p
{m+1kr-1T[k]=p ikmT[k]<p
ikmT[k]<p
mkdT[k]>p}
mkdT[k]>p}
ordRpida(T,i,m);
ordRpida(T,i,m);
ordRpida(T,r,d)
ordRpida(T,r,d)
fsi
fsi
fin
fin
Pg. 64
Factorizacin =
= test de primalidad + particin
Para factorizar n, hemos terminado si n es primo,
si no, encontramos un divisor m de n y
recursivamente factorizamos m y n/m.
J. Campos - C.P.S.
Pg. 65
funcin
funcin particin(n:entero)
particin(n:entero) devuelve
devuelve entero
entero
variables
variables m:entero;
m:entero; xito:booleano
xito:booleano
principio
principio
m:=2;
m:=2; xito:=falso;
xito:=falso;
mq
mq mm sqrt(n)
sqrt(n) and
and not
not xito
xito hacer
hacer
si
si mm divide
divide aa nn
entonces
entonces xito:=verdad
xito:=verdad
sino
sino m:=m+1
m:=m+1
fsi
fsi
fmq;
fmq;
si
si xito
xito
entonces
entonces devuelve
devuelve mm
sino
sino devuelve
devuelve nn
fsi
fsi
fin
fin
J. Campos - C.P.S.
( n)
Pg. 66
J. Campos - C.P.S.
Pg. 67
J. Campos - C.P.S.
Pg. 68