You are on page 1of 68

Algoritmos probabilistas

v
v
v

Introduccin
Clasificacin de los algoritmos
probabilistas
Algoritmos numricos
La aguja de Buffon
Integracin probabilista

Algoritmos de Monte Carlo


Verificacin de un producto matricial
Comprobacin de primalidad

Algoritmos de Las Vegas


Ordenacin probabilista
Factorizacin de enteros

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

2
9
13
14
16

21
23
33

50
61
65

Pg. 1

Algoritmos probabilistas:
Introduccin
v

Una historia sobre un tesoro,


un dragn, un computador, un elfo y
un dobln.
En A o B hay un tesoro de
x lingotes de oro pero no s
si est en A o B.
Un dragn visita cada noche
el tesoro llevndose y lingotes.
S que si permanezco 4 das
ms en O con mi computador
resolver el misterio.
Un elfo me ofrece un trato:
A
Me da la solucin ahora si le
pago el equivalente a la
cantidad que se llevara el
dragn en 3 noches.
5 das
Qu debo hacer?

5 das

5 das

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

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.

Esquemas algortmicos - Algoritmos probabilistas

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

Si acierto a ir en primer lugar al sitio


adecuado, obtengo x-5y lingotes.
Si no acierto, voy al otro sitio despus y me
conformo con x-10y lingotes.
El beneficio esperado medio es x-75y.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 5

Algoritmos probabilistas:
Introduccin
v

Ms diferencias entre los algoritmos


deterministas y probabilistas:
A un algoritmo determinista nunca se le permite
que no termine: hacer una divisin por 0, entrar
en un bucle infinito, etc.
A un algoritmo probabilista se le puede permitir
siempre que eso ocurra con una probabiliad
muy pequea para datos cualesquiera.
u Si ocurre, se aborta el algoritmo y se repite
su ejecucin con los mismos datos.

Si existe ms de una solucin para unos datos


dados, un algoritmo determinista siempre
encuentra la misma solucin (a no ser que se
programe para encontrar varias o todas).
Un algoritmo probabilista puede encontrar
soluciones diferentes ejecutndose varias veces
con los mismos datos.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

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.

El anlisis de la eficiencia de un algoritmo


determinista es, a veces, difcil.
El anlisis de los algoritmos probabilistas es,
muy a menudo, muy difcil.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 7

Algoritmos probabilistas:
Introduccin
v

Un comentario sobre el azar y


la incertidumbre:
A un algoritmo probabilista se le puede permitir
calcular una solucin equivocada, con una
probabilidad pequea.
Un algoritmo determinista que tarde mucho
tiempo en obtener la solucin puede sufrir
errores provocados por fallos del hardware y
obtener una solucin equivocada.
Es decir, el algoritmo determinista tampoco
garantiza siempre la certeza de la solucin y
adems es ms lento.
Ms an:
Hay problemas para los que no se conoce ningn
algoritmo (determinista ni probabilista) que d la
solucin con certeza y en un tiempo razonable
(por ejemplo, la duracin de la vida del
programador, o de la vida del universo):
Es mejor un algoritmo probabilista rpido que d
la solucin correcta con una cierta probabilidad
de error.
Ejemplo: decidir si un n de 1000 cifras es primo.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 8

Algoritmos probabilistas:
Clasificacin
Algoritmos probabilistas

Algoritmos que no garantizan


la correccin de la solucin

Algoritmos que nunca dan


una solucin incorrecta

Algoritmos numricos:

Algoritmos de Las Vegas:

dan una solucin aproximada


dan un intervalo de confianza
(con probab. del 90% la
respuesta es 33 3)
a mayor tiempo de ejecucin,
mejor es la aproximacin

toman decisiones al azar


si no encuentran la solucin
correcta lo admiten
es posible volver a intentarlo
con los mismos datos hasta
obtener la solucin correcta

Algoritmos de Monte Carlo:


dan la respuesta exacta con
una alta probabilidad
en algunas ocasiones dan
una respuesta incorrecta
no se puede saber si la
respuesta es la correcta
se reduce la probabilidad
de error alargando la
ejecucin
J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 9

Algoritmos probabilistas:
Clasificacin
v

Ejemplo de comportamiento de los


distintos tipos ante un mismo problema
Cundo descubri Amrica Cristobal Coln?
Algoritmo numrico ejecutado cinco veces:
u
u
u
u
u

Entre 1490 y 1500.


Entre 1485 y 1495.
Entre 1491 y 1501.
Entre 1480 y 1490.
Entre 1489 y 1499.
Aparentemente, la probabilidad de dar un
intervalo erroneo es del 20% (1 de cada 5).
Dando ms tiempo a la ejecucin se podra
reducir esa probabilidad o reducir la
anchura del intervalo (a menos de 11 aos).

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

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.

Esquemas algortmicos - Algoritmos probabilistas

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.

Esquemas algortmicos - Algoritmos probabilistas

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.

La solucin obtenida es siempre


aproximada pero su precisin esperada
mejora aumentando el tiempo de
ejecucin.

Normalmente, el error es inversamente


proporcional a la raz cuadrada del
esfuerzo invertido en el clculo
Se necesita cien veces ms de trabajo para
obtener una cifra ms de precisin.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 14

Algoritmos numricos:
La aguja de Buffon
v

Pregunta natural: Es til este mtodo?


Cmo de rpida es la convergencia?
Es decir, cuntas veces hay que tirar la aguja?
Es muy lenta, es decir el mtodo no sirve [BB96]:
n=1500000 para obtener un valor de p001 con
probabilidad 09.

p305, con probabilidad 085

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 15

Algoritmos numricos:
Integracin probabilista
v

Problema:
Calcular:
I=

f (x) d x , donde f :R R + es continua y a b


f

I
b a

I/(b-a) es la altura media de f entre a y b.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

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.

Esquemas algortmicos - Algoritmos probabilistas

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

100 veces ms de trabajo para obtener una


cifra ms de precisin

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

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.

Esquemas algortmicos - Algoritmos probabilistas

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).

Por ejemplo, para f (x) = sin 2 100! x


toda
llamada a int_det(f,n,0,1) con 1n100
devuelve 0, aunque el valor exacto es 05.
Otra ventaja: clculo de integrales mltiples.
u Algoritmos deterministas: para mantener la
precisin, el coste crece exponencialmente
con la dimensin del espacio.
u En la prctica, se usan algoritmos
probabilistas para dimensin 4 o mayor.
u Existen tcnicas hbridas (parcialmente
sistemticas y parcialmente probabilistas):
integracin cuasi-probabilista.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 20

Algoritmos de Monte Carlo:


Introduccin
v

Hay problemas para los que no se


conocen soluciones deterministas ni
probabilistas que den siempre una
solucin correcta
(ni siquiera una solucin aproximada).
Estos si que son problemas!

Algoritmo de Monte Carlo:


A veces da una solucin incorrecta.
Con una alta probabilidad encuentra una
solucin correcta sea cual sea la entrada.
(NOTA: Esto es mejor que decir que el algoritmo
funciona bien la mayora de las veces).

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 21

Algoritmos de Monte Carlo:


Introduccin
v

Sea p un nmero real tal que 0<p<1.


Un algoritmo de Monte Carlo es p
correcto si:
Devuelve una solucin correcta con
probabilidad mayor o igual que p,
cualesquiera que sean los datos
de entrada.
A veces, p depender del tamao de la
entrada, pero nunca de los datos de la
entrada en s.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 22

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
v

Problema:
Dadas tres matrices nn, A, B y C, se trata de
verificar si C = AB.

Solucin trivial:
Multiplicar A por B con:
u

El algoritmo directo: coste (n3).


El algoritmo de Strassen (Divide y vencers,
pg. 46): se puede llegar hasta (n2,376).

Puede hacerse mejor?

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 23

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
R. Freivalds: Fast probabilistic algorithms,
Proceedings of the 8th Symposium on the Mathematical
Foundations of Computer Science, Lecture Notes in
Computer Science, vol. 74, Springer-Verlag, 1979.

Solucin de Monte Carlo:


Suponer que D = AB - C
Sea i el ndice de una fila no nula de D:
Sea S {1,,n} cualquiera.
r
Sea S (D) = Di
( (D) = 0)

r
Di 0.

i S

Sea

{}
{}

S i , si i S
S =
S \ i , si i S

Como Di es no nulo, S (D) y S (D) no pueden ser


simultaneamente nulos.
Si S se elige al azar (lanzando una moneda para
cada j), la pertenencia de i a S es tan probable
como la no pertenencia, luego:
r
1
(D)
0
P S

2

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 24

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
r
Por otra parte, si C = AB, S (D) = 0 siempre.
Idea para decidir si C = AB o no:
Calcular S (D) para un conjunto elegido al azar S
r
y comparar el resultado con 0.

Cmo calcular S (D) eficientemente?


Sea X el vector de n 0s y 1s tal que
1, si j S
Xj =
0, si j S
Entonces:
S (D) = XD
Es decir, se trata de decidir si XAB = XC o no
para un vector binario X elegido al azar.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 25

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
El coste del clculo de XAB = (XA)B y de XC es
(n2).
Algoritmo 1/2correcto para decidir si AB = C:
tipo
tipo matriz=vector[1..n,1..n]de
matriz=vector[1..n,1..n]de real
real
funcin
funcin Freivalds(A,B,C:matriz)
Freivalds(A,B,C:matriz)
devuelve
devuelve booleano
booleano
variables
variables X:vector[1..n]de
X:vector[1..n]de 0..1
0..1
j:entero
j:entero
principio
principio
para
para j:=1
j:=1 hasta
hasta nn hacer
hacer
X[j]:=uniforme_entero(0,1)
X[j]:=uniforme_entero(0,1)
fpara;
fpara;
si
si (X*A)*B=X*C
(X*A)*B=X*C
entonces
entonces devuelve
devuelve verdad
verdad
sino
sino devuelve
devuelve falso
falso
fsi
fsi
fin
fin

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 26

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
v

Es til un algoritmo 1/2correcto para


tomar una decisin?

Es igual que decidir tirando una


moneda al aire.
Y sin siquiera mirar los valores de las
matrices!

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 27

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
v

Idea: Repetir varias veces la prueba


funcin
funcin repe_Freivalds(A,B,C:matriz;
repe_Freivalds(A,B,C:matriz;
k:entero)
k:entero)
devuelve
devuelve booleano
booleano
variables
variables i:entero;
i:entero; distinto:booleano
distinto:booleano
principio
principio
distinto:=verdad;
distinto:=verdad; i:=1;
i:=1;
mq
i

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

Si devuelve falso, es seguro que AB C.


Y si devuelve verdad?
Cul es la probabilidad de error?

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 28

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
Si C = AB, cada llamada a Freivalds devuelve
necesariamente el valor verdad, por tanto
repe_Freivalds devuelve siempre verdad.
En este caso, la probabilidad de error es 0.
Si C AB, la probabilidad de que cada llamada
devuelva (incorrectamente) el valor verdad es
como mucho 1/2.
Como cada llamada a Freivalds es
independiente, la probabilidad de que k
llamadas sucesivas den todas una respuesta
incorrecta es como mucho 1/2k.
El algoritmo repe_Freivalds es (1-2-k)correcto.
Por ejemplo, si k = 10, es mejor que 0999correcto;
si k = 20, la probabilidad de error es menor que uno
entre un milln.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 29

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
v

Situacin tpica en algoritmos de Monte


Carlo para problemas de decisin:
Si est garantizado que
si se obtiene una de las
dos respuestas
(verdad o falso)
el algoritmo es
correcto

el decrecimiento de la
probabilidad de error es
espectacular repitiendo
la prueba varias veces.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 30

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
v

Alternativa: disear el algoritmo con


una cota superior de la probabilidad de
error como parmetro.
funcin
funcin epsilon_Freivalds(A,B,C:matriz;
epsilon_Freivalds(A,B,C:matriz;
epsilon:real))
epsilon:real))
devuelve
booleano
devuelve booleano
variable
variable k:entero
k:entero
principio
principio
k:=log(1/epsilon);
k:=log(1/epsilon);
devuelve
devuelve repe_Freivalds(A,B,C,k)
repe_Freivalds(A,B,C,k)
fin
fin

Coste: (n2log 1/epsilon).

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 31

Algoritmos de Monte Carlo:


Verificacin de un producto
matricial
v

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 32

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Algoritmo de Monte Carlo ms


conocido: decidir si un nmero impar
es primo o compuesto.
Ningn algoritmo determinista conocido puede
responder en un tiempo razonable si el
nmero tiene cientos de cifras.
La utilizacin de primos de cientos de cifras es
fundamental en criptografa
(ver Divide y vencers, pg. 35 y siguientes).

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 33

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

La historia comienza en 1640 con Pierre


de Fermat
Pequeo Teorema de Fermat.
Sea n primo. Entonces,
an-1 mod n = 1
para todo entero a tal que 1an-1.
Ejemplo: n = 7, a = 5 56 mod 7 = 1.
En efecto, 56 = 15625 = 2232 7 + 1.
Enunciado contrarrecproco del mismo teorema.
Si a y n son enteros tales que 1an-1, y si
an-1 mod n 1, entonces n no es primo.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 34

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Una ancdota sobre Fermat y su


teorema:
El mismo formul la hiptesis:
n

Fn = 22 + 1 es primo para todo n.


Lo comprob para: F0=3, F1=5, F2=17, F3=257,
F4=65537.
Pero no pudo comprobar si F5=4294967297 lo era.
Tampoco pudo darse cuenta de que:
3F5 1 mod F5 = 3029026160 1 F5 no es primo
(por el contrarrecproco de su propio teorema) .
Fue Euler, casi cien aos despus, quien factoriz
ese nmero:
F5 = 641 6700417

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 35

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Utilizacin del pequeo teorema de


Fermat para comprobar la primalidad:
En el caso de F5, a Fermat le hubiera bastado con
ver que
a: 1 a F5 1 t.q . aF 5 1 mod F5 1
(a = 3)
Esto nos da la siguiente idea:

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 36

Algoritmos de Monte Carlo:


Comprobacin de primalidad
El clculo de an-1 mod n puede hacerse con el
algoritmo de potenciacin discreta que ya vimos
(Divide y vencers, pg. 33):
funcin
devuelve
funcin potIter(a,n,z:entero)
potIter(a,n,z:entero)
devuelve entero
entero
n
{Devuelve
{Devuelve aan mod
mod z.}
z.}

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 37

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Estudio del algoritmo basado en el


pequeo teorema de Fermat:
Si devuelve el valor falso, es seguro que el
nmero no es primo (por el teorema de Fermat).
Si devuelve el valor verdad:
No podemos concluir!
Necesitaramos el recproco del teorema de
Fermat:
Si a y n son enteros tales que 1an-1 y
an-1 mod n = 1, entonces n es primo.
Pero este resultado es falso:
u Casos triviales en que falla: 1n-1 mod n = 1,
para todo n2.
u Ms casos triviales en que falla:
(n-1)n-1 mod n = 1, para todo impar n3.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 38

Algoritmos de Monte Carlo:


Comprobacin de primalidad
Pero, falla el recproco del teorema de Fermat en
casos no triviales (a1 y an-1)?
SI.
El ejemplo ms pequeo:
414 mod 15 = 1 y sin embargo 15 no es primo.
v

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.

Modificacin del algoritmo Fermat:


Elegir a entre 2 y n-2 (en lugar de entre 1 y n-1).
El algoritmo falla para nmeros no primos slo
cuando elige un falso testigo de primalidad.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 39

Algoritmos de Monte Carlo:


Comprobacin de primalidad

Dos noticias:
Una buena y una mala

J. Campos - C.P.S.

Algoritmo de Fermat
modificado?
Es pcorrecto?

Esquemas algortmicos - Algoritmos probabilistas

Pg. 40

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

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

ms de la mitad de ellos tienen slo 2 falsos


testigos de primalidad,
menos del 16% tienen ms de 15,
en total, hay slo 4490 falsos testigos de
primalidad para todos los 332 nmeros
impares no primos menores que 1000
(de un total de 172878 candidatos existentes)
puede verse que la probabilidad media de
error del algoritmo sobre los nmeros
impares no primos menores que 1000 es
menor que 0033 y es todava menor para
nmeros mayores que 1000.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 41

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 42

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Una solucin:

G.L. Miller: Riemanns hipothesis and tests for primality,


Journal of Computer and System Sciences,
13(3), pp. 300-317, 1976.

M.O. Rabin: Probabilistic algorithms,


Algorithms and Complexity: Recent Results and
New Directions, J.F. Traub (ed.), Academic Press, 1976.

Hay una extensin del teorema de Fermat:


Sea n un entero impar mayor que 4 y primo.
Entonces se verifica el predicado
B(n)=(at mod n=1)
i
(i entero, 0i<s, t.q. a 2 t mod n = n 1)
para todo tro de enteros a, s y t tales que:
2an-2 y n-1=2st, con t impar.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 43

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

De nuevo, necesitaramos el recproco


de ese teorema
Si n, s, t y a son enteros tales que n>4, n-1=2st,
con n y t impares, 2an-2, y se verifica B(n),
entonces n es primo.

Pero tampoco es cierto:


Existen nmeros n y a con n>4 e impar, 2an-2,
para los que se verifica B(n) para algunos valores
de s y t verificando n-1=2st, con t impar, y n no es
primo.
Por ejemplo: n=289, a=158, s=5, t=9.

Si n y a son excepciones del recproco


del teorema se dice que n es un
pseudoprimo en el sentido fuerte para
la base a y que a es un falso testigo de
primalidad para n en el sentido fuerte.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 44

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Veamos primero como evaluar B(n):

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 45

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Podemos basar el algoritmo


probabilista de comprobacin de
primalidad en la funcin B:
funcin
funcin Miller_Rabin(n:entero)
Miller_Rabin(n:entero)
devuelve
devuelve booleano
booleano
{Pre:
{Pre: n>4
n>4 ee impar}
impar}

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 46

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

Por suerte (?), el nmero de falsos


testigos de primalidad en el sentido
fuerte es mucho menor que el de falsos
testigos de primalidad.
Considerando los impares no primos menores
que 1000, la probabilidad media de elegir un
falso testigo (en el s fuerte) es menor que 001.
Ms del 72% de esos nmeros no admiten
ningn falso testigo (en el s fuerte).
Todos los impares no primos entre 5 y 1013 fallan
como pseudoprimos (en el s fuerte) para al
menos una de las bases 2, 3, 5, 7 61.
Es decir, para todo n1013, n es primo si y slo si
B(2,n)B(3,n)B(5,n)B(7,n)B(61,n) = verdad
(ste es un algoritmo determinista, para n1013).

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 47

Algoritmos de Monte Carlo:


Comprobacin de primalidad
v

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 48

Algoritmos de Monte Carlo:


Comprobacin de primalidad
Como la respuesta falso siempre es correcta,
para reducir la probabilidad de error se puede
aplicar la misma tcnica que para verificar el
producto de matrices:
funcin
funcin repe_Miller_Rabin(n,k:entero)
repe_Miller_Rabin(n,k:entero)
devuelve
devuelve booleano
booleano
{Pre:
{Pre: n>4
n>4 ee impar}
impar}

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 49

Algoritmos de Las Vegas:


Introduccin
v

Un algoritmo de Las Vegas nunca da


una solucin falsa.
Toma decisiones al azar para encontrar una
solucin antes que un algoritmo determinista.
Si no encuentra solucin lo admite.
Hay dos tipos de algoritmos de Las Vegas,
atendiendo a la posibilidad de no encontrar una
solucin:
a) Los que siempre encuentran una solucin
correcta, aunque las decisiones al azar no
sean afortunadas y la eficiencia disminuya.
b) Los que a veces, debido a decisiones
desafortunadas, no encuentran una solucin.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 50

Algoritmos de Las Vegas:


Introduccin
v

Tipo a: Algoritmos de Sherwood


Existe una solucin determinista que es mucho
ms rpida en media que en el peor caso.
Ejemplo: quicksort.
Coste peor (n2) y coste promedio O(nlog n).
u

Coste promedio: se calcula bajo la hiptesis


de equiprobabilidad de la entrada.
En aplicaciones concretas, la equiprobabilidad es una falacia: entradas catastrficas
pueden ser muy frecuentes.
Degradacin del rendimiento en la prctica.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 51

Algoritmos de Las Vegas:


Introduccin
Los algoritmos de Sherwood pueden reducir o
eliminar la diferencia de eficiencia para distintos
datos de entrada:
u

Uniformizacin del tiempo de ejecucin


para todas las entradas de igual tamao.
En promedio (tomado sobre todos los
ejemplares de igual tamao) no se mejora el
coste.
Con alta probabilidad, ejemplares que eran
muy costosos (con algoritmo determinista)
ahora se resuelven mucho ms rpido.
Otros ejemplares para los que el algoritmo
determinista era muy eficiente, se resuelven
ahora con ms coste.
Efecto Robin Hood:
Robar tiempo a los ejemplares ricos
para drselo a los pobres.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 52

Algoritmos de Las Vegas:


Introduccin
v

Tipo b: Algoritmos que, a veces, no dan


respuesta.
Son aceptables si fallan con probabilidad baja.
Si fallan, se vuelven a ejecutar con la misma
entrada.
Resuelven problemas para los que no se conocen
algoritmos deterministas eficientes
(ejemplo: la factorizacin de enteros grandes).
El tiempo de ejecucin no est acotado pero s es
razonable con la probabilidad deseada para toda
entrada.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 53

Algoritmos de Las Vegas:


Introduccin
Consideraciones sobre el coste:
u

Sea LV un algoritmo de Las Vegas que


puede fallar y sea p(x) la probabilidad de
xito si la entrada es x.

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

Se exige que p(x)>0 para todo x.

Es mejor an si >0: p(x) para todo x


(as, la probabilidad de xito no tiende a 0
con el tamao de la entrada).

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 54

Algoritmos de Las Vegas:


Introduccin
funcin
funcin repe_LV(x:tpx)
repe_LV(x:tpx) devuelve
devuelve tpsolucin
tpsolucin
variables
variables s:tpsolucin;
s:tpsolucin; xito:booleano
xito:booleano
principio
principio
repetir
repetir
LV(x,s,xito)
LV(x,s,xito)
hastaQue
hastaQue xito;
xito;
devuelve
devuelve ss
fin
fin
u

El nmero de ejecuciones del bucle es


1/p(x).
Sea v(x) el tiempo esperado de ejecucin de
LV si xito=verdad y f(x) el tiempo
esperado si xito=falso.
Entonces el tiempo esperado t(x) de
repe_LV es:

)(

t (x) = p(x)v (x) + 1 p (x) f (x) + t (x)


t (x) = v (x) +

J. Campos - C.P.S.

1 p(x)
f (x)
p(x)

Esquemas algortmicos - Algoritmos probabilistas

Pg. 55

Algoritmos de Las Vegas:


Introduccin
t (x) = v (x ) +

1 p (x )
f (x )
p(x )

Notar que una disminucin de v(x) y f(x)


suele ser a costa de disminuir p(x).

Hay que optimizar esta funcin.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 56

Algoritmos de Las Vegas:


Introduccin
Ejemplo sencillo: El problema de las 8 reinas en
el tablero de ajedrez.
u

Algoritmo determinista (Bsqueda con


retroceso, pg. 16 y siguientes):
N de nodos visitados: 114
(de los 2057 nodos del rbol)
Algoritmo de Las Vegas voraz: colocar cada
reina aleatoriamente en uno de los escaques
posibles de la siguiente fila.
El algoritmo puede terminar con xito o
fracaso (cuando no hay forma de colocar la
siguiente reina).
N de nodos visitados si hay xito: v=9
N esperado de nodos visitados si hay
fracaso: f=6971
Probabilidad de xito: p=01293
(ms de 1 vez de cada 8)
N esperado de nodos visitados repitiendo
hasta obtener un xito: t=v+f(1-p)/p= 5593.
Menos de la mitad!

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 57

Algoritmos de Las Vegas:


Introduccin
Puede hacerse mejor combinando ambos:
u

Poner las primeras reinas al azar y dejarlas


fijas y con el resto usar el algoritmo de
bsqueda con retroceso.
Cuantas ms reinas pongamos al azar:
Menos tiempo se precisa para
encontrar una solucin o para fallar.
Mayor es la probabilidad de fallo.

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

Esquemas algortmicos - Algoritmos probabilistas

Pg. 58

Algoritmos de Las Vegas:


Introduccin
Mejor solucin a mano: 3 reinas al azar (probadlo!)
n al azar
0
1
2
3
4
5
6
7
8

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

Datos reales medidos en un computador:


Discrepancias!
En el caso n al azar = 8, el 71% del tiempo se
gasta en generar nmeros pseudo-aleatorios.
El valor ptimo es colocar 2 reinas al azar.

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 59

Algoritmos de Las Vegas:


Introduccin
Para dimensiones mayores a 8:
Para 39 reinas en un tablero de dimensin 39.
Algoritmo determinista:
11402835415 nodos
41 horas en un computador
Algoritmo Las Vegas, con 29 reinas al azar:
p=0,21
vf100 nodos
t500 nodos (20106 veces mejor)
8,5 milisegundos
Algoritmo L.V. puro (39 reinas al azar):
p=0,0074
150 milisegundos (106 veces mejor)

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 60

Algoritmos de Las Vegas:


Ordenacin probabilista
v

Ejemplo de algoritmo de Las Vegas de


tipo a (algoritmo de Sherwood).
Recordar el mtodo de ordenacin de Hoare
(Divide y vencers, pg. 14)):

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 61

Algoritmos de Las Vegas:


Ordenacin probabilista
algoritmo
algoritmo divide(e/s
divide(e/s T:vect[1..n]de
T:vect[1..n]de dato;
dato;
ent
ent i,d:1..n;
i,d:1..n; ent
ent p:dato;
p:dato;
sal
sal m:1..n)
m:1..n)
{Permuta
{Permuta los
los elementos
elementos i..d
i..d de
de TT de
de forma
forma que:
que:
imd,
imd,
k
k t.q.
t.q. ik<m:
ik<m: T[k]p,
T[k]p,
T[m]=p,
T[m]=p,
k
k t.q.
t.q. m<kd:
m<kd: T[k]>p}
T[k]>p}

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 62

Algoritmos de Las Vegas:


Ordenacin probabilista
Un ejemplo del caso peor:
Si todos los elementos son iguales, el algoritmo
anterior no se percata.
Mejora evidente:
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 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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 63

Algoritmos de Las Vegas:


Ordenacin probabilista
Versin probabilista:
En lugar de elegir el pivote p como el primer
elemento del vector, lo ideal sera elegir la
mediana, pero esto sera muy costoso, luego
elegimos el pivote al azar en el intervalo i..d.
algoritmo
algoritmo ordRpidaLV(e/s
ordRpidaLV(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 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

Tiempo esperado en el peor caso: O(nlog n)


J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 64

Algoritmos de Las Vegas:


Factorizacin de enteros
v
v

Ejemplo de algoritmo de Las Vegas de


tipo b.
Problema: descomponer un nmero en
sus factores primos.
Problema ms sencillo: particin
Dado un entero n>1, encontrar un divisor no
trivial de n, suponiendo que n no es primo.

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.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 65

Algoritmos de Las Vegas:


Factorizacin de enteros
v

Solucin ingenua para el problema de


la particin:

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

Coste en el peor caso:

J. Campos - C.P.S.

( n)

Esquemas algortmicos - Algoritmos probabilistas

Pg. 66

Algoritmos de Las Vegas:


Factorizacin de enteros
v

El coste de la solucin ingenua es


demasiado alto:
Partir un nmero duro de unas 40 cifras:
Si cada ejecucin del bucle tarda 1 nanosegundo,
el algoritmo puede tardar miles de aos.
Nmero duro significa que es el producto de
dos primos de tamao parecido.
Partir un nmero n de 100 cifras:
n 7 1049

(Nota: 1030 picosegundos es el doble de la edad


estimada del Universo.)

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 67

Algoritmos de Las Vegas:


Factorizacin de enteros
v

Recordar el sistema RSA de criptografa


En 1994 se factoriz un nmero duro de 129
cifras tras 8 meses de trabajo de ms de 600
computadores de todo el mundo.
Se utiliz un algoritmo de Las Vegas.
Existen varios algoritmos de Las Vegas para
factorizar nmeros grandes (vase [BB96]).
u

Estn basado en resultados avanzados de


teora de nmeros.
Siguen teniendo costes altsimos
(factorizar un nmero de 100 cifras precisa
del orden de 21015 operaciones).

J. Campos - C.P.S.

Esquemas algortmicos - Algoritmos probabilistas

Pg. 68