6. Volvamos al caso Fibonacci…
¿Por qué era ineficiente la solución recursiva?
¿Los subproblemas en los que descomponía el
problema original eran dependientes o
independientes?
¿Qué diferencia hay entre ésta y la solución
iterativa?
7. Programación Dinámica
Programación =
Escoger basándose en una serie de opciones
Utilización de una tabla o arreglo para construir
una solución
8. Programación Dinámica: Pasos
1. Caracterizar la estructura de la solución
óptima
2. Analizar el problema de manera “top-down”
3. Resolver el problema de manera “bottom-up”
4. Construir la solución óptima
9. Caminos más cortos
Aplicaciones (dos de muchas)
Vuelos
Líneas de ensamblado
Tipo de grafo
Ponderado y dirigido
Matriz de pesos
¿Cómo harías para resolver este problema?
10.
11. Algoritmo de Floyd
Calcula una serie sucesiva de matrices
Donde se van almacenando los caminos más cortos
Nota: El CMC siempre será un camino simple
En cada iteración, se va liberando un vértice
Para fungir como intermediario en el camino
Primera iteración caminos directos
Última iteración Se puede pasar por todos los
vértices
12. Algoritmo de Floyd
La receta: Matriz de pesos en
iteración k (se libera
vértice k)
Lo que ya tengo
Distancia que uso con
k como intermediario
15. Algoritmos voraces
Quiere el máximo en cada paso
Para ciertos problemas, asegura el óptimo
Algoritmos “miopes”
16. Árbol de extensión mínima
Subgrafo conectado que contiene todos los
vértices del grafo original.
Es un árbol.
De peso mínimo.
¿Aplicaciones?
1
1
1
17. Algoritmo de Prim
Basado en vértices
Pasos
Escoger un vértice
De sus aristas, seleccionar la de menor peso
Incluir la arista y los vértices en el árbol
19. Algoritmo de Kruskal
Basado en aristas
Pasos
Ordenar por pesos las aristas.
Extraer la más liviana.
Si no crea un ciclo
Registrarlacomo parte del árbol
Registrar sus nodos como parte del árbol
21. Pseudocódigo del algoritmo (alto
nivel)
F=
crear conjuntos disjuntos de V, uno por cada vértice y que solamente
contiene el vértice
ordenar las aristas de menor a mayor
while la instancia no se ha resuelto
seleccionar la siguiente arista
if arista conecta dos vértices de conjuntos disjuntos
fusiona los conjuntos
agrega arista a F
if todos los conjuntos se han fusionado
la instancia ha sido resuelta
22. Otros algoritmos para búsqueda y
optimización
Local
Recocido simulado
Tabú
Algoritmos genéticos
Agrupamiento
23. Resumen
Programación dinámica
Enfoque top-down implementado como bottom-
up
Se van almacenando las soluciones
Algoritmos voraces
Obtienenel óptimo asegurando el mayor valor en
cada paso
24. Referencias
Baase, Sara y Allen Van Gelder. Computer
Algorithms: Introduction to Design and Analysis.
Addison-Wesley, Massachusetts, 2000. 3era.
edición.
Cormen, Thomas H. et al. Introduction to
Algorithms. McGraw-Hill, EUA, 2003. 2da.
Edición.
Neapolitan, Richard & Kumarss Naimipour .
Foundations of Algorithms Using C++
Pseudocode. Jones and Bartlett Publishers,
Massachusetts, 1998. 2da. edición.