Algoritmos mas complejos Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Divide y Vencerás Técnica empleada en cosas dispares. También en el diseño de algoritmos. (ordenación: Quicksort; Mergesort). Consiste básicamente en dividir un problema original de un tamaño dado, en subproblemas (generalmente dos) de la misma naturaleza que el problema original pero de menor tamaño. El proceso de subdivisión continua hasta que el tamaño de los subproblemas permiten que sean resueltos de manera sencilla (caso base). Una vez resueltos los casos bases las soluciones de los mismoas se recombinan para obtener la solución. Ej.: Torres de Hanoi Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Divide y Vencerás Es necesario 1.- El problema original debe poder dividirse fácilmente en un conjunto de subproblemas, del mismo tipo que el problema original pero con una resolución mas sencilla. 2.- Los subproblemas deben ser disjuntos. La solución de un subproblema debe obtenerse independientemente. 3.- Normalmente los subproblemas deben ser de tamaños parecidos. Como mínimo es necesario que haya dos subproblemas. 4.- Es necesario un método (mas o menos directo) de resolver los problemas de tamaño pequeño. 5.- Es necesario tener un método para combinar los resultados de los subproblemas. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Divide y Vencerás Ejemplos de Aplicación Búsqueda binaria o dicotómica Búsqueda de máximo y mínimo Multiplicación de matrices Algoritmo de Strassen (una variedad para la multiplicación de matrices). Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Voraces (avance rápido; greedy) Consiste en seleccionar en cada momento la mejor opción de entre un conjunto de candidatos, hasta que se obtenga una solución para el problema o no existan mas candidatos. Siguen los siguientes pasos: 1.- Se parte de una solución vacía 2.- En cada paso se escoge el siguiente elemento (el mejor) para añadir a la solución, entre los candidatos. 3.- Una vez tomada esta decisión no se podrá deshacer. 4.- El algoritmo acabará cuando el conjunto de elementos seleccionados constituya o no existan más candidatos. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Voraces (avance rápido; greedy) Dado un problema con n entradas, el algoritmo obtiene un subconjunto de estas n entradas que satisfacen una determinada restricción definida en el problema. Cada uno de los subconjuntos que cumplen esta condición se dice que soluciones factibles. Estas soluciones tienen que ser tales que maximicen o minimicen la función objetivo, de manera, que aquella solución que cumpla esta función objetivo se denomina solución optima. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Voraces (avance rápido; greedy) Similitudes que se utilizan para la construcción de este tipo de algoritmo: 1.- Un conjunto de candidatos. (las tareas a ejecutar; los nodos de un grafo; etc.) 2.- El conjunto de candidatos que ya se han usado. 3.- Una función solución que indica cuando un conjunto de candidatos forma una solución (no necesariamente optima). 4.- Una función que dice cuando un conjunto es factible, es decir, cuando un conjunto (sin ser necesariamente una solución) tiene la posibilidad de llegar a ser una solución (no necesariamente optima). 5.- Una función de selección que indica en cualquier instante cual es el candidato mas prometedor de los no usados hasta el momento. 6.- Una función objetivo que da el valor de una solución (el tiempo necesario para ejecutar todas las tares, la longitud de un camino, etc.) que es la función que intentamos optimizar. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Voraces (avance rápido; greedy) Ejemplos de aplicación El problema de la mochila Algoritmo voraces sobre grafos Algoritmo de Prim (seleccionar las aristas más idonéas comprobando si las soluciones son posibles). Algoritmo de Kruskal (selecciona la arista optima en cada momento y se comprueba si puede formar parte de la solución (si no forma ciclos) y así se incorporará a la solción, en caso contrario, se ignora para siempre. Algoritmo Dijkstra (grafo dirigidos donde se quiere encontrar el camino minímo entre un vértice y todos los demás. El problema del viajante de comercio. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Programación Dinámica Es una evolución de las dos técnicas anteriores. La PD toman una decisión en cada etapa. Dicha decisión la toma, con una visión global del problema, lo que provoca una solución optima. Resuelve el problema original combinando las soluciones de subproblema mas pequeños. La PD no utiliza recursividad, sino que almacena los resultados de los subproblema en una tabla, calculando primero las soluciones para los problemas pequeños. La PD es una técnica donde la solución a un problema puede ser vista como el resultado de una secuencia de decisiones. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Programación Dinámica Se analizan todas las posibles secuencias de decisión para obtener la secuencia óptima. Para ello se hace uso del principio de optimalidad de Bellman el cual nos señala que cualquier subsecuenia de una secuencia óptima, tiene que ser optima. Principio de optimalidad de Bellman: Cualquier subsecuencia de decisiones de una secuencia óptima de decisiones que resuelve un problema, también debe ser óptima respecto al problema de que resuelve. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Programación Dinámica Ejemplos de Aplicación EL problema de la mochila Cambio de monedas El camino mínimo entre cualquier par de vértices El viaje mas barato Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Vuelta atrás Divide y vencerás no se puede aplicar para resolver problemas de optimización debido principalmente a que es una estrategia de resolución de problemas. Los algoritmos voraces puede ser aplicados a diferentes tipos de problemas, pero presentan la dificultad de que una vez tomada una decisión no se puede deshacer, lo que puede implicar que no se alcance una solución porque el camino de búsqueda que ha tomado el algoritmo no proporciona una solución. La PD por el contrario si puede proporcionar una solución ya que va explorando todo el espacio de soluciones de forma ascednete, peo el espacio de búsuqeda puede ser muy grande ya que se tienen que explora todos los problemas de tamaño inferior al problema dado oara determinar la solución optima. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Vuelta atrás Realiza una búsqueda exhaustiva y sistemática en el espacio de soluciones, motivo por el suele resultar ineficiente. Se representa mediante árboles de expansión, donde cada nivel indica el número de etapas que se han cubierto hasta el momento para obtener una solución para el problema. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Vuelta atrás Ejemplo de aplicaciones Coloreado de grafos Problema de la Mochila Problema del laberinto Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A. Ramificación y Poda Vuelta atrás puede ser aplicado en problemas de optimización, pero tenemos que apuntar que no tiene un diseño efectivo para dicha función, debido a que tiene que expandir completamente el árbol de expansión implícito para determinar la solución optima. Algoritmos y Estructuras de Datos II (Programación I) – Mgter. Vallejos, Oscar A.