algoritmos

24
ANÁLISIS Y DISEÑO DE ALGORITMOS Universidad Nacional de Ingeniería

Upload: eramos

Post on 28-Dec-2015

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos

ANÁLISIS Y DISEÑO DE ALGORITMOS

Universidad Nacional de Ingeniería

Page 2: Algoritmos

Contenidos

Programación dinámica Algoritmos voraces

Page 3: Algoritmos

Divide y vencerásProgramación Dinámica

Algoritmos voracesAproximación

Page 4: Algoritmos

Divide y Vencerás: Resumen Dividir

Descomponer el problema. Vencer

Resolver los sub-problemas. Combinar

Obtener la solución global.

Page 5: Algoritmos

Programación Dinámica

Page 6: Algoritmos

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

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

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

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

v1

v5

v2

v4 v3

3

51

3

2

19

3

24

Nuestro grafo…

Page 11: Algoritmos

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

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

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

Algoritmos voraces

Page 15: Algoritmos

Algoritmos voraces

Quiere el máximo en cada paso Para ciertos problemas, asegura el óptimo Algoritmos “miopes”

Page 16: Algoritmos

Á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

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

v5

v1

v2

v3

v4

1

3 36

4

2 5

Page 19: Algoritmos

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

v5

v1

v2

v3

v4

1

34

2

Page 21: Algoritmos

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

Otros algoritmos para búsqueda y optimización

Local Recocido simulado Tabú Algoritmos genéticos Agrupamiento

Page 23: Algoritmos

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

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.