Algoritmos mas complejos

Anuncio
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.
Descargar