Algoritmos
Transcript of Algoritmos
![Page 1: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/1.jpg)
ANÁLISIS Y DISEÑO DE ALGORITMOS
Universidad Nacional de Ingeniería
![Page 2: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/2.jpg)
Contenidos
Programación dinámica Algoritmos voraces
![Page 3: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/3.jpg)
Divide y vencerásProgramación Dinámica
Algoritmos voracesAproximación
![Page 4: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/4.jpg)
Divide y Vencerás: Resumen Dividir
Descomponer el problema. Vencer
Resolver los sub-problemas. Combinar
Obtener la solución global.
![Page 5: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/5.jpg)
Programación Dinámica
![Page 6: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/6.jpg)
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?
![Page 7: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/7.jpg)
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
![Page 8: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/8.jpg)
Programación Dinámica: Pasos1. Caracterizar la estructura de la solución
óptima2. Analizar el problema de manera “top-
down”3. Resolver el problema de manera
“bottom-up”4. Construir la solución óptima
![Page 9: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/9.jpg)
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?
![Page 10: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/10.jpg)
v1
v5
v2
v4 v3
3
51
3
2
19
3
24
Nuestro grafo…
![Page 11: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/11.jpg)
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
![Page 12: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/12.jpg)
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
D(k)[i][j]= min(D(k-1)[i][j],
D(k-1)[i][k]+D(k-1)[k][j]
![Page 13: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/13.jpg)
Pseudocódigo del algoritmo (Neapolitan)
floyd (n, W[][], D[][]){
D=W;
for(k=1; k<=n; k++) for(i=1; i<=n; i++) for(j=1; j<=n; j++) D[i][j]=minimo(D[i][j], D[i][k] + D[k][j]);
}
![Page 14: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/14.jpg)
Algoritmos voraces
![Page 15: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/15.jpg)
Algoritmos voraces
Quiere el máximo en cada paso Para ciertos problemas, asegura el óptimo Algoritmos “miopes”
![Page 16: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/16.jpg)
Á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
![Page 17: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/17.jpg)
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
![Page 18: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/18.jpg)
v5
v1
v2
v3
v4
1
3 36
4
2 5
![Page 19: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/19.jpg)
Algoritmo de Kruskal
Basado en aristas Pasos
Ordenar por pesos las aristas. Extraer la más liviana. Si no crea un ciclo
Registrarla como parte del árbol Registrar sus nodos como parte del árbol
![Page 20: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/20.jpg)
v5
v1
v2
v3
v4
1
34
2
![Page 21: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/21.jpg)
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
![Page 22: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/22.jpg)
Otros algoritmos para búsqueda y optimización
Local Recocido simulado Tabú Algoritmos genéticos Agrupamiento
![Page 23: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/23.jpg)
Resumen
Programación dinámica Enfoque top-down implementado como
bottom-up Se van almacenando las soluciones
Algoritmos voraces Obtienen el óptimo asegurando el mayor
valor en cada paso
![Page 24: Algoritmos](https://reader038.fdocuments.es/reader038/viewer/2022110401/55cf9728550346d033900242/html5/thumbnails/24.jpg)
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.