90 likes | 234 Views
Bloque 2: Divide y Vencerás. Unidad 1: Nociones básicas. Introducción. La técnica divide y vencerás consiste en: Descomponer el problema en un conjunto de subproblemas más pequeños Resolver dichos subproblemas (normalmente, de forma recursiva)
E N D
Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas
Introducción • La técnica divide y vencerás consiste en: • Descomponer el problema en un conjunto de subproblemas más pequeños • Resolver dichos subproblemas (normalmente, de forma recursiva) • Combinar las soluciones para obtener la solución del problema original • Es una técnica que produce buenos resultados para muchos problemas. Por ejemplo: • Multiplicación y exponenciación • Búsqueda y ordenación • Selección y determinación de la media
Esquema general Se puede emplear o no un “algoritmo básico” • Esquema general: FUNCTION DyV(x) BEGIN if x es suficientemente simple then DyV:= solucionar(x) else begin descomponer x en varias instancias x1, x2, ..., xl; for i:= 1 to l do yi:= DyV(xi); DyV:= combinar(y1, y2, ..., yl); end; END;
Análisis • Los algoritmos de DyV poseen una complejidad algorítmica definida por g(n) Si nn0 es suficientemente pequeño t(n) = l*t(nb) + f(n) En otro caso • g(n): tiempo para calcular la solución para el caso base • f(n): tiempo adicional para calcular las sub-instancias del problema y combinar los resultados • Puede obtenerse una solución general por expansión de recurrencias
Análisis • En muchos casos, la función de interés f(n) es un polinomio nk • En este caso, la ecuación de recurrencia tiene una solución analíticamente más clara: • Puede observarse claramente que la complejidad del algoritmo DyV depende casi totalmente de f(n), y es independiente de g(n) • La solución de la ecuación de recurrencia anterior significa que, por ejemplo, si f(n) tuviera un orden lineal es posible que la complejidad del algoritmo DyV sea igualmente lineal, independientemente del coste de resolver el problema objetivo (esto es, g(n)) mejor peor
Restricciones • Para que pueda aplicarse la técnica divide y vencerás es necesario: • El problema original debe poder dividirse EFICIENTEMENTE en un conjunto reducido de subproblemas: • De menor tamaño que el problema original • Normalmente los subproblemas deben ser de tamaños parecidos • La solución de cada subproblema obtenerse independientemente las restantes • Necesitamos un método de resolver los problemas de tamaño pequeño (algoritmo básico) • Es necesario tener un método EFICIENTE de combinar los resultados de los subproblemas. g(n) f(n)
Umbral • Un problema de los algoritmos DyV es cuándo determinar que un problema x es suficientemente simple • Normalmente, un problema es suficientemente simple cuando su tamaño es menor que un determinado umbral • La importancia de determinar correctamente el umbral reside en que: • permitir una recursión hasta alcanzar un tamaño de problema de solución inmediata normalmente es más costoso que • solucionar un problema de tamaño reducido utilizando un “algoritmo básico”
Umbral • No obstante, el valor umbral no puede determinarse teóricamente, pues depende del valor de las constantes ocultas de las funciones de complejidad temporal • El valor umbral debe determinarse empíricamente conforme al siguiente esquema • Determinar el valor de la constante oculta mediante ejecuciones repetidas de los algoritmos DyV y básico, utilizando técnicas de regresión • Notar que la notación es una simplificación de las funciones de complejidad. Así, por ejemplo, una función (n2) es realmente de la forma an2+bn+c • Determinar qué tamaño de instancia hace iguales los tiempos de ejecución de los algoritmos DyV y básico
Notas finales • En ciertas ocasiones, un algoritmo DyV no descompone un problema en varios subproblemas, sino que convierte un problema complejo en un problema más simple • Por ejemplo, búsqueda binaria • En este caso, en lugar de “Algoritmos Divide y Vencerás”, hablamos de “Simplificación” • Puede no existir (o no ser necesario) un algoritmo básico, • no existe recombinación de resultados y • l=1