algoritmos

Post on 28-Dec-2015

6 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ANÁLISIS Y DISEÑO DE ALGORITMOS

Universidad Nacional de Ingeniería

Contenidos

Programación dinámica Algoritmos voraces

Divide y vencerásProgramación Dinámica

Algoritmos voracesAproximación

Divide y Vencerás: Resumen Dividir

Descomponer el problema. Vencer

Resolver los sub-problemas. Combinar

Obtener la solución global.

Programación Dinámica

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?

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

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

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?

v1

v5

v2

v4 v3

3

51

3

2

19

3

24

Nuestro grafo…

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

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]

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]);

}

Algoritmos voraces

Algoritmos voraces

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

Á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

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

v5

v1

v2

v3

v4

1

3 36

4

2 5

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

v5

v1

v2

v3

v4

1

34

2

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

Otros algoritmos para búsqueda y optimización

Local Recocido simulado Tabú Algoritmos genéticos Agrupamiento

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

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.

top related