Está en la página 1de 37

Robert Espinoza Domínguez

Algoritmos probabilistas y paralelos


Algoritmos probabilistas
Introducción

 Existen muchos problemas en los que llegado a cierto


punto, se ha de tomar una decisión óptima. A menudo,
la búsqueda de esta decisión toma un tiempo
excesivo.
 A veces es mejor no tomar esta decisión óptima, sino
tomar una buena decisión.
 En algunas ocasiones tomar decisiones aleatorias
nos puede llevar a la solución deseada.
 Cuando se tenga que realizar una elección en un
algoritmo, a veces es preferible hacerlo aleatoriamente
en vez de perder tiempo en decidir cuál de las posibles
alternativas es la correcta.
Introducción

 Esta elección aleatoria debe se, en promedio, más


eficiente que la decisión, aunque en algún caso el
proceso aleatorio tome, por mala suerte, más tiempo.
 En estos casos hablamos de tiempo esperado de
ejecución y no de orden de complejidad.
 En este tema se verán algoritmos que, basados en la
Teoría de la Probabilidad, encuentran una solución
aproximada o una solución exacta (aunque a veces no
la encuentran o dan una solución errónea)
Algoritmos deterministas

Un algoritmo determinista es aquél que a


partir de unos mismos datos obtiene
siempre la misma solución..
Algoritmos deterministas

Entrada A

Algoritmo Salida 1
Entrada B
Determinista
Entrada C
Algoritmo probabilista

Es aquél que basa su resultado en la toma de


algunas decisiones al azar, de tal forma que, en
promedio, obtiene una buena solución al
problema planteado para cualquier distribución
de los datos de entrada.
A partir de unos mismos datos se pueden
obtener distintas soluciones y en algunos
casos, soluciones erróneas.
Algoritmos probabilistas

Salida 1
Entrada A

Algoritmo Salida 2
Entrada B
Probabilista
Entrada C Salida 3

Probabilista no significa
incierto.
Clasificación

 Los algoritmos probabilistas se clasifican en:


 Numéricos. Solución aproximada
 Monte Carlo. Solución exacta, pero a veces se
equivocan.
 Las Vegas. Nunca devuelven una solución errónea,
pero a veces no la encuentran.
 Sherwood. Siempre encuentran la solución y siempre es
correcta.
 Cada uno de ellos se debe aplicar bajo ciertas
condiciones específicas y todos buscan soluciones de
distinta forma e incluso encuentran (a veces no)
distinto tipo de soluciones.
Clasificación

¿Cuándo se fundó Lima?

 Algoritmo numérico,
 Si se invoca cinco veces.
Entre 1533 y 1543
Entre 1530 y 1540
Entre 1526 y 1536
Entre 1529 y 1539
Entre 1524 y 1534 (Falso)
 Si le damos más tiempo al algoritmo se puede reducir la
probabilidad de un intervalo falso (20% en nuestro caso)
Clasificación
 Algoritmo de Montecarlo.
 Si se le pregunta diez veces a un algoritmo de Montecarlo
1535
1535
1535
1536
1535
1535
300 A.C.
1535
1535
1535
 Mayormente responde correctamente pero a veces se
equivoca (tasa de error del 20%)
 Se puede reducir el error dándole más tiempo al algoritmo.
Clasificación

 Algoritmo de Las Vegas


 Si se le invoca diez veces podría responder
1535
1535
¡No sé!
1535
1535
1535
1535
1535
¡No sé!
1535
 Nunca da una respuesta incorrecta, pero a veces no
responde.
Algoritmos numéricos
Algoritmos numéricos

 Estos algoritmos dan una solución aproximada


 En algunos casos la solución real calculada por un
algoritmo tradicional no es exacta debido a la
resolución de la representación de la información
utilizada.
 Cuando el error cometido sea menor que dicha
resolución, la solución obtenida por el algoritmo
probabilista es tan exacta como la encontrada por el
algoritmo tradicional.
 Cuando la precisión del ordenador no es significativa,
se puede dar como resultado un intervalo o bien una
probabilidad
Algoritmos numéricos

 Ejemplos:
 La aguja de Buffon
 Integración numérica
 Cálculo de PI
 Test de primalidad
Cálculo del número π. Algoritmo Chudnovsky

 El algoritmo Chudnovsky, descubierto por los


hermanos David y Gregory Chudnovsky, matemáticos
ucranianos parece ser el más empleado en los
cálculos de alta precisión de dígitos de π.
Cálculo del número π. Algoritmo Chudnovsky

 El algoritmo Chudnovsky, descubierto por los


hermanos David y Gregory Chudnovsky, matemáticos
ucranianos parece ser el más empleado en los
cálculos de alta precisión de dígitos de π.
Cálculo del número π. Algoritmo Chudnovsky

 Como se puede comprobar, no es más que un


sumatorio sobre k desde 0 hasta infinito (∞), donde se
hacen una barbaridad de operaciones en función de k
en cada iteración.
 Cada término de esta fórmula añade 14 decimales
exactos al valor calculado de π
 k es una proporción entre la precisión en decimales
que necesitemos calcular y el valor límite de 14.
 No se puede calcular más de catorce decimales
porque precisamente ese es el límite de las variables
de doble precisión.
Cálculo del número π. Algoritmo Chudnovsky

Método cálculoPiChudnovsky()
k  0
numeroPI  0
precision  14
limite = (Precision + 3) / 14
Mientras (k < limite) hacer
numerador  0, denominador  0
numerador  ((-1) ^ k)*factorial(6*k) *
(13591409 + (545140134*k))
denominador  factorial(3*k)*(factorial(k)^3)*
(640320^((3*k) + (3/2)))
numeroPI  numeroPI + (Numerador/Denominador)
kk+1
finMientras
numeroPI 12*numeroPI,
numeroPI 1/numeroPI
Fin Método
Algoritmos Montecarlo

 En contraposición a los algoritmos numéricos, los


algoritmos Montecarlo siempre encuentran soluciones
exactas, aunque a veces se equivocan.
 La característica más importante de estos algoritmos
es que suele ser posible reducir arbitrariamente la
probabilidad de error a costa de un ligero aumento del
tiempo de cálculo.
 La precisión de la respuesta va en función del tiempo
de ejecución, por lo que su eficiencia estará en orden
inverso a su precisión.
Algoritmos Montecarlo

 El objetivo de estos algoritmos es que en sucesivas


llamadas a la rutina principal, se rebaje la probabilidad
de error
 Nunca se debe dar como válido un algoritmo
Montecarlo que falle siempre para una misma instancia
de un problema.
 Los algoritmos resultantes de aplicar la técnica
Montecarlo son extremadamente simples y eficientes
Algoritmos Montecarlo

 Algoritmo de MonteCarlo p-correcto, (con ½ < p < 1):


algoritmo que devuelve una solución correcta con una
probabilidad no menor que p sea cual sea el caso
considerado.
 Algoritmo de MonteCarlo consistente: devuelve
siempre la misma solución correcta para la misma
entrada.
 Ejemplo:
 Suponer un algoritmo MonteCarlo consistente 0.7-correcto:
MC(x)
 Considerar otro algoritmo que llame varias veces al anterior,
chequeando si alguna de las soluciones devueltas por él son
iguales entre si (indicaría que probablemente esa sea la
solución correcta)
Algoritmos Montecarlo

 Este segundo algoritmo es mejor que MC(x) puesto que al ser


consistente, si hubieran dos soluciones iguales tienen que ser
la correcta
 La probabilidad de acierto de este segundo algoritmo aumenta
a un 0.84% (Amplificación de la ventaja estocástica)
Método MC3(x)
tMC(x)
uMC(x)
vMC(x) Algoritmo de
Si (t = u O t = v) entonces montecarlo
consistente
Return(t)
Sino
Return(u)
Fin Si
Fin Método
Algoritmos Montecarlo

 Ejemplos de algoritmos de Montecarlo:


 Verificación de la multiplicación de matrices.
 Test de primalidad Montecarlo.
 Elemento mayoritario de un arreglo.
Algoritmos Montecarlo

 Comparación de multiplicación de matrices


Sean las matrices A, B, C de orden n, verificar si C=AB

Método ProductoMC(A, B, C, n)
Para i desde 0 hasta n-1 hacer
x[ i ] aleatorio(0,1)
Fin Para
Si (XA)B = XC entonces
Retornar (verdadero)
Si no
Retornar(Falso)
Fin Si
Fin Método
Algoritmos Montecarlo

 Si el método ProductoMC devuelve Verdadero no


estaremos seguros de que C=AB, en cambio si devuelve
Falso tendremos la certeza de que C ≠ AB
 Aplicamos ProductoMC varias veces
Método RepetirProductoMC(A, B, C, k)
Para i desde 1 hasta k hacer
Si (ProductoMC (A,B,C, n) = Falso)entonces
Retornar (Falso)
Fin Si
Retornar(Verdadero)
Fin Método
 Si realmente C = AB entonces después de pasar k veces
por el bucle toda llamada a ProductoMC será Verdadero.
Algoritmos Montecarlo

 En este caso la probabilidad es cero.


 Por otra parte, si C ≠ AB, entonces la probabilidad de que
ProductoMC devuelva incorrectamente Verdadero es
como máximo ½.
 Estas probabilidades se multiplican, porque los
lanzamientos de las monedas son independientes entre
llamadas consecutivas.
 Por lo tanto la probabilidad de que k llamadas, todas ellas
pueden devolver un valor erróneo es de 2-k como máximo.
 Esta es la única forma que ProductoMC devuelva una
respuesta incorrecta. Por lo tanto concluimos que nuestro
algoritmo es (1-2-k) – correcto.
 Cuando k=10, esto es mejor que 99.9%-correcto.
Algoritmos Montecarlo

 Alternativamente se puede dar a los algoritmos


Montecarlo una cota superior explícita para la probabilidad
de error admisible:

Método ProductoMCEpsilon (A, B,C, n, e)


k  Entero (log2 (1/e))
Retornar RepetirProductoMC(A,B,C,k)
Fin Método
Algoritmos de las Vegas

 Estos algoritmos avanzan un paso más: nunca


devuelven una solución errónea, pero si no encuentran
una solución correcta, no devuelven nada
 Al igual que en los algoritmos numéricos y Montecarlo,
la probabilidad de encontrar una solución correcta
aumenta con el tiempo empleado en obtenerla
 Están especialmente indicados en problemas que de
implementarlos determinísticamente serían casi
intratables, pero probabilísticamente son bastante
eficientes.
 Se arriesgan a no encontrar la solución del problema a
costa de reducir el tiempo de ejecución
Algoritmos de las Vegas

 El objetivo es minimizar la probabilidad de no


encontrarla, tomando decisiones aleatorias con
inteligencia
 Su esquema general se parece en parte al de los
algoritmos Montecarlo, salvo que incluyen una variable
booleana para saber cuando se encuentra la solución
correcta.
 En ocasiones, en lugar de realizar el cálculo completo,
podemos dejar al azar encontrar parte de la solución,
calculando el resto de forma determinista con el
algoritmo tradicional
Algoritmos de las Vegas

 Ejemplos:
 El problema de las ocho reinas
 Factorización de enteros muy grandes
 La elección de un jefe
Algoritmos Sherwood

 Estos algoritmos siempre encuentran la solución y ésta


siempre es correcta
 Filosofía: tomar una decisión aleatoria que disminuya
el tiempo de ejecución en el peor de los casos, sin que
perjudique la exactitud de la solución
 La decisión aleatoria es crucial y debe hacer que todas
las instancias del problema se distancien del peor
caso.
 Ejemplos
 Búsqueda del k-ésimo menor elemento de una arreglo.
Algoritmos paralelos
Introducción

 Hasta el momento suponemos implícitamente que


nuestros algoritmos se ejecutarán en un procesador
que sólo puede ejecutar una instrucción a la vez.
 Una razón para esto es que el diseño de la mayoría de
las computadoras ha estado guiado por el mismo
principio básico desarrollado por Von Neumann.
 Sin embargo, con el desarrollo del hardware y la
reducción de su costo, ahora se puede pensar en
máquinas capaces de ejecutar un gran número de
instrucciones en un instante, en las que un gran
número de pequeños procesadores pueden cooperar
para resolver un problema.
Algoritmos Paralelos

Un algoritmo paralelo a diferencia de los


algoritmos secuenciales tradicionales, es aquel
que puede ser ejecutado por partes en el mismo
instante de tiempo por varias unidades de
procesamiento, para finalmente unir todas las
partes y obtener el resultado correcto.
Algoritmos Paralelos

 Algunos algoritmos se dividen fácilmente en partes,


por ejemplo,
 Un algoritmo que calcule todos los números primos entre
1 y 1000, donde se podría dividir los números originales
en subconjuntos y calcular los primos para cada uno de
los subconjuntos de los números originales; al final,
uniríamos todos los resultados y tendríamos la solución
final del algoritmo.
 Sin embargo, a veces los problemas no se pueden
dividir tan fácilmente, como por ejemplo los algoritmos
disponibles para calcular Pi,.
 Tales problemas se llaman los problemas
intrínsecamente secuenciales o seriales
Algoritmos Paralelos

 Los algoritmos paralelos son importantes porque es


más rápido tratar grandes tareas de computación
mediante la paralelización que mediante técnicas
secuenciales.
 Esta es la forma en que se trabaja en el desarrollo de
los procesadores modernos, ya que es más difícil
incrementar la capacidad de procesamiento con un
único procesador que aumentar su capacidad de
cómputo mediante la inclusión de unidades en
paralelo, logrando así la ejecución de varios flujos de
instrucciones dentro del procesador.

También podría gustarte