1 / 15

Diseño y análisis de algoritmos

Diseño y análisis de algoritmos. Algoritmos probabilistas. Temario. Algoritmos probabilistas II Test de primalidad Algoritmos tipo Las Vegas. Algoritmos probabilistas Test de primalidad.

brady-logan
Download Presentation

Diseño y análisis de algoritmos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 >3 , ejemplo 9 es impar y satisface el teorema de fermat con a=8 1864135*9+1=16777216= • 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 1000. La cantidad total de testigos para los 332 es de 172878 • 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. (651693055693681) • 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 retornar verdadero 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) • ELSE • return BBinaria(k+1,R) • END • 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

More Related