La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y análisis de algoritmos

Presentaciones similares


Presentación del tema: "Diseño y análisis de algoritmos"— Transcripción de la presentación:

1 Diseño y análisis de algoritmos
Algoritmos probabilistas

2 Temario Algoritmos probabilistas II Test de primalidad
Algoritmos tipo Las Vegas

3 Algoritmos probabilistas
Test de primalidad Algoritmo de tipo Monte Carlo más conocido. Problema: verificar si un número impar es primo o no (compuesto). Si un número tiene cientos de cifras, ningun algoritmo determinista conocido puede responder en un tiempo “razonable”. Tiene aplicaciones en criptografía, tema que se verá en las próximas sesiones. La base para el algoritmo es el pequeño teorema de Fermat (1640): sea primo , entonces se cumple para cualquier a tal que 1<a<=n-1 Ejemplo n=7, a=5 en efecto El contrarecíproco de este teorema es el siguiente: Si a y n son enteros tales que 1<a<=n-1 y si entonces n no es primo

4 Algoritmos probabilistas
Test de primalidad Implementación Si el algoritmo indica que n no es primo , entonces la respuesta es correcta. Si el algoritmo indica verdadero, entonces puede ser cierto o no. Casos triviales en que falla, n impar > , ejemplo 9 es impar y satisface el teorema de fermat con a= *9+1= = A 8 se le llama falso testigo de primalidad, si a=4 y n=9 7281*9+1=65530<> 65536= que en este caso n=4 es un testigo correcto e indica que 9 no es primo. funcion fermat(n:entero):booleano variables a:entero inicio a:=uniforme(2,n-1); si exp(a,n-1) mod n = 1 entonces devuelve verdadero sino devuelve falso finsi fin

5 Algoritmos probabilistas
Test de primalidad Formalmente dado un entero n que no sea primo, un entero a tal que 2<a<=n-2 se llama falso testigo de primalidad si satisface el pequeño teorema de fermat. La primera mejora coniste en eliminar los casos triviales eligiendo a entre 2 y n-2. El algoritmo falla sólo para falsos testigos de primalidad. La pregunta es si existen muchos testigos falsos Depende, para el caso de números no primos impares, sólo 5 de los primeros 332 primos menores que 1000 no tienen testigos falsos, pero Más de la mitad tienen sólo dos falsos testigos de primalidad Menos del 16% tienen más de 15 En total , hay sólo 4490 falsos testigos de primalidad para los primeros 332 impares no primos menores que La cantidad total de testigos para los 332 es de En estos casos el error medio del algoritmo sería mero al 0.03 El problema es que no se puede generalizar, hay números no primos que admiten muchos falsos testigos de primalidad.

6 Algoritmos probabilistas
Test de primalidad Por ejemplo , el 561 no es primo y pasa el teorema de fermat en 318 veces, por lo que tiene un 57% error. Hay casos mucho peores incluso con más del 99.9% de falsos testigos de primalidad. ( ) Puede demostrarse que el algoritmo fermat no es p-correcto para ningún p>0 La probabilidad de error no puede disminuirse mediante repeticiones del algoritmo Existe un teorema que, extendiendo el teorema de Fermat, proporciona una mejor manera de testear la primalidad. Sea n un entero impar, n>=4. Existen s> 0, t impar tal que Un número a, 2<=a<=n-2 se dice pertenece a B(n) si y solo si cumple una de las siguientes propiedaes: Existe i , 0<=i<s tal que

7 Algoritmos probabilistas
Test de primalidad Implementación funcion B(n,a:entero):booleano variables s,t,i,x:entero inicio i:=i+1;t:=n-1; repita s:=s+1; t:=t div 2 hasta t mod 2 =1 {determina los valores de s y t} x:= exp(a,t) mod n si x=1 or x= n-1 entonces retornar verdadero sino para i:= 1 hasta s-1 hacer x:=(x*x) mod n si x= n-1 entnces fin si fin para retornar falso fin

8 Algoritmos probabilistas
Test de primalidad Este algoritmo también entrega valor de verdad cuando n no es primo, es decir testigos falsos ahora llamados testigos falsos fuertes de primalidad. Por ejemplo el número 289 no es primo, es divisible por 17, pero si se usa a=158 resulta Primero se encuentran t=9 y s=5 ya que Luego se encuentra x=exp(158,5) mod 289 =131, que no es ni 1 ni 288 se ejecuta el ciclo con i (a lo mas 4 veces): A pesar de estos posibles errores, se puede demostrar que los testigos falsos fuertes de primalidad para todo número n no primos son menors del 25% entre 2 y n-2. Por lo que se pude definir un nuevo algoritmo

9 Algoritmos probabilistas
Test de primalidad Implementación Sólo tiene una probabilidad de error del 25% Es más, como el algoritmo es 0.75-correcto y cada vez que retorna falso la respuesta es correcta, se trata de un algoritmo sesgado, al igual que el de verificación de la multiplicación de matrices. Esto permite iterar para reducir el margen de error. Si se itera k veces el algoritmo será Ejemplo si k= 10, el error esperado es menos de una millonésima sobre 100 funcion MillerRabin(n:entero):booleano {n>4} variables a:entero inicio a:=uniforme(2,n-2); devuelve b(n,a); fin

10 Algoritmos probabilistas
Test de primalidad Implementación con error controlado funcion repe_MillerRabin(n,k:entero):booleano variables i:entero inicio para i:=1 hasta k hacer si not MillerRabin(n) entonces devuelve falso fin-si fin-para devuelve verdad fin

11 Algoritmos probabilistas
Algoritmos tipo Las Vegas Un algoritmo tipo Las Vegas nunca da una solución falsa. Toma desiciones al azar para encontrar soluciones antes que un algoritmo determinista. Si no encuentra la solución lo admite Hay dos tipos de algoritmos tipo Las Vegas, en relación a la posibilidad de no encontrar una solución: Los que siempre encuentran una solución correcta, aunque las desiciones al azar no sean afortunadas y la eficiencia disminuya. Aquellos que pueden reconocer que se han equivocado. El algoritmo toma desiciones que eventualmente pueden ocacionar que no encuentre ninguna respuesta.

12 Algoritmos probabilistas
Algoritmos tipo Las Vegas Tipo a, se les conoce como algoritmos sherwood Existe una solución determinista que es mucho más rápida en media que en el peor caso. Ejemplos: búsqueda binaria, costo promedio quikcsort: costo peor costo promedio Sin embargo la complejidad en tiempo promedio se basa en la equiprobabilidad de la entrada En la realidad los datos pueden estar sesgados y causar una baja de la performance. Al usar este tipo de algoritmo probabiístico se puede reducir la diferencia de eficiencia producto de los datos de entrada Uniformizacioón de los tiempos de ejecucuón para todas las entradas de igual tamaño En promedio (tomando todas las instancias de igual tamaño) no se mejora el costo Con alta probabilidad ejemplares muy costosos(algoritmo determinista) se resuelven más rápidamente Al contrario,ejemplares resueltos rápidamente se demoran más

13 Algoritmos probabilistas
Algoritmos tipo Las Vegas Tipo a, se les conoce como algoritmos sherwood Implementación de la búsqueda binaria aleatoria Function BBinaria(L,R:index;x:item):index; Var k:index; IF L>=R then IF a[R]=x then RETURN i ELSE RETURN -1 ELSE BEGIN k:=uniforme_entero(L,R) IF x<=a[k] then return BBinaria(L,k) return BBinaria(k+1,R) END

14 Algoritmos probabilistas
Algoritmos tipo Las Vegas 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 existen algoritmos deterministas eficientes (ejemplo:factorización de números grandes) Sea LV un algoritmo las vegas genérico y p(x) la probabilidad de éxito para una entrada x Si repetimos el algoritmo: la probabilidad de encontrar la solución después de k iteraciones es funcion LV(x:tpx, sal s:tsolucion):booleano Inicio devuelve verdad si alcanza solución devuelve falso si no alcanza solución fin

15 Algoritmos probabilistas
Algoritmos tipo Las Vegas Las Vegas iterativo Los algoritmos greedy se pueden convertir en algoritmos las vegas seleccionando aleatoriamente de la lista de candidatos. Por ejemplo seleccionar un % de los mejores la lista de candidatos. Se puede por ejemplo dejar al azar la solución del problema de las 8 reinas, puede fallar, pero se da cuenta. Ejercicios, hacer algoritmo probabilista para el problema de las 8 reinas. funcion repe_LV(x:tpx):tpsolucion variables s: tpsolucion;éxito:boolean inicio repetir éxito:=LV(x,s) gasta exito devuelve s fin


Descargar ppt "Diseño y análisis de algoritmos"

Presentaciones similares


Anuncios Google