53
Algoritmos Algoritmos y y Estructuras de Datos Estructuras de Datos Cursada 2014 Prof. Catalina Mostaccio Prof. Alejandra Schiavoni Facultad de Informática - UNLP

Clase 9 grafos parte iii (cam min - arbol min)-ay_ed-2014

Embed Size (px)

DESCRIPTION

Caminos minimos

Citation preview

Page 1: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos Algoritmos y y

Estructuras de DatosEstructuras de DatosCursada 2014

Prof. Catalina MostaccioProf. Alejandra Schiavoni

Facultad de Informática - UNLP

Page 2: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

GRAFOS

Algoritmos y Estructuras de Datos

Page 3: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 3

Agenda - Grafos

• Caminos de costo mínimo

• Árbol de expansión mínimo

Page 4: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 4

Agenda - Grafos

• Caminos de costo mínimo

• Árbol de expansión mínimo

Page 5: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 5

Agenda – Grafos Caminos de costo mínimoCaminos de costo mínimo

Definición Definición

Algoritmos para el cálculo del camino mínimo desde un origen Algoritmos para el cálculo del camino mínimo desde un origen

en:en: Grafos sin pesoGrafos sin peso Grafos con pesos positivosGrafos con pesos positivos

• Algortimo de Dijkstra: dos implementacionesAlgortimo de Dijkstra: dos implementaciones Grafos con pesos positivos y negativosGrafos con pesos positivos y negativos Grafos acíclicosGrafos acíclicos

Algoritmo para el cálculo de los caminos mínimos entre todos los Algoritmo para el cálculo de los caminos mínimos entre todos los

pares de vérticespares de vértices

Page 6: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 6

Camino de costo mínimoDefinición

Sea G=(V,A) un grafo dirigido y pesado, el costo c(i,j)

está asociado a la arista v(i,j).Dado un camino: v1, v2, v3,…….vN

El costo del camino es:

Este valor también se llama longitud del camino pesado.La longitud del camino no pesado es la cantidad de aristas

∑−

=

+=1

1

)1,(N

i

iicC

Page 7: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 7

Camino de costo mínimoDefinición (cont.)

El camino de costo mínimo desde un vértice vi a otro

vértice vj es aquel en que la suma de los costos de las aristas es mínima.

Esto significa que:

es mínima∑−

=

+=1

1

)1,(N

i

iicC

Page 8: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 8

Camino de costo mínimoDefinición (cont.)

Ejemplo:1 2

50

1 330

25

1 330

220

450

1 4100

220

1 510

220

410

50

35

100

120

40

Page 9: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 9

Algoritmos de Caminos mínimos

Grafos sin peso

Grafos con pesos positivos

Grafos con pesos positivos y negativos

Grafos dirigidos acíclicos

Page 10: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 10

Algoritmos de Caminos mínimos

Los algoritmos calculan los caminos

mínimos desde un vértice origen s a

todos los restantes vértices del grafo

Page 11: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 11

Algoritmos de Caminos mínimosGrafos sin peso

Estrategia: Recorrido en amplitud (BFS)Pasos:

Avanzar por niveles a partir del origen, asignando distancias según se avanza (se utiliza una cola)

Inicialmente, es Dw=∞. Al inspeccionar w se reduce al valor correcto Dw=Dv+1

Desde cada v, visitamos a todos los nodos adyacentes a v

Page 12: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 12

Algoritmos de Caminos mínimosGrafos sin peso (cont.)

Page 13: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

1313

Vi Dv PvConoc

V0 ∞ 0 0

V1 ∞ 0 0

V2 0 0 0

V3 ∞ 0 0

V4 ∞ 0 0

V5 ∞ 0 0

V6 ∞ 0 0Valores iniciales de la tabla

Algoritmos de Caminos mínimosGrafos sin peso (cont.)

∞ ∞

∞ ∞

Page 14: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

1414

Algoritmo Caminos mínimos basado en BFS

Camino_min_GrafoNoPesadoG,s) {(1) para cada vértice v Є V hacer

(2) Dv = ∞; Pv = 0; Conocv= 0;(3) fin para(4) Ds = 0; Encolar (Q,s); Conocv= 1;

(5) Mientras (not esVacio(Q)) hacer(6) Desencolar (Q,u); (7) Marcar u como conocido;(8) para c/vértice w Є V adyacente a u hacer(9) si w no es conocido entonces(10) Dw = Du + 1;(11) Pw = u; (12) Encolar(Q,w); Conocv= 1;(13) fin si(14) fin para(15) fin mientras }

Page 15: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

1515

Algoritmo Caminos mínimos basado en BFS

Camino_min_GrafoNoPesadoG,s) {(1) para cada vértice v Є V hacer

(2) Dv = ∞; Pv = 0; Conocv= 0;(3) fin para(4) Ds = 0; Encolar (Q,s); Conocv= 1;

(5) Mientras (not esVacio(Q)) hacer(6) Desencolar (Q,u); (7) Marcar u como conocido;(8) para c/vértice w Є V adyacente a u hacer(9) si w no es conocido entonces(10) Dw = Du + 1;(11) Pw = u; (12) Encolar(Q,w); Conocw= 1;(13) fin si(14) fin para(15) fin mientras }

Page 16: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

1616

Vi Dv PvConoc

V0 ∞ 0 0

V1 ∞ 0 0

V2 0 0 0

V3 ∞ 0 0

V4 ∞ 0 0

V5 ∞ 0 0

V6 ∞ 0 0Valores iniciales de la tabla

Algoritmos de Caminos mínimosGrafos sin peso (cont.)

Page 17: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

1717

Vi Dv Pv

V0 ∞ 0

V1 ∞ 0

V2 0 0

V3 ∞ 0

V4 ∞ 0

V5 ∞ 0

V6 ∞ 0Valores iniciales de la tabla

Programación 3

Algoritmos de Caminos mínimosGrafos sin peso (cont.)

∞ ∞

∞ ∞

Page 18: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

1818

Algoritmo Caminos mínimos basado en BFS

Camino_min_GrafoNoPesadoG,s) {(1) para cada vértice v Є V hacer

(2) Dv = ∞; Pv = 0;(3) fin para(4) Ds = 0; Encolar (Q,s);

(5) Mientras (not esVacio(Q)) hacer(6) Desencolar(Q,u); (7) para c/vértice w Є V adyacente a u hacer

(8) si Dw = ∞ entonces(9) Dw = Du + 1;(10) Pw = u; (11) Encolar(Q,w);(12) fin si(13) fin para(14) fin mientras }

Page 19: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 19

Algoritmos de Caminos mínimos Grafos con pesos positivos – Algoritmo de Dijkstra

Estrategia: Algoritmo de Dijkstra

Pasos: Dado un vértice origen s , elegir el vértice v que

esté a la menor distancia de s , dentro de los vértices no procesados

Marcar v como procesado

Actualizar la distancia de w adyacente a v

Page 20: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 20

Algoritmo de Dijkstra (cont.)

Para cada vértice v mantiene la siguiente información:

Dv : distancia mínima desde el origen (inicialmente ∞ para

todos lo vértices excepto el origen con valor 0)

Pv : vértice por donde paso para llegar

Conocido : dato booleano que me indica si está procesado

(inicialmente todos en 0)

Page 21: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 21

Algoritmo de Dijkstra (cont.)

La actualización de la distancia de los adyacentes w se realiza con el siguiente criterio:

Se compara Dw con Dv + c(v,w)

Se actualiza si Dw > Dv + c(v,w)

Distancia de s a w

(sin pasar por v)Distancia de s a w,

pasando por v

Page 22: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 22

Algoritmo de DijkstraEjemplo

V Dv PvConoc.

1 0 0 0

2 ∞ 0 0

3 ∞ 0 0

4 ∞ 0 0

5 ∞ 0 0

6 ∞ 0 0

s

Valores iniciales de la tabla

Page 23: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 23

Algoritmo de DijkstraEjemplo (cont.)

V Dv PvConoc.

1 0 0 1

2 ∞ 0 0

3 40 1 0

4 ∞ 0 0

5 10 1 0

6 5 1 0•Valores al seleccionar el vértice 1

•Actualiza la distancia de 3, 5 y 6

s

Page 24: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 24

Algoritmo de DijkstraEjemplo (cont.)

V Dv PvConoc.

1 0 0 1

2 ∞ 0 0

3 40 1 0

4 ∞ 0 0

5 10 1 0

6 5 1 0

s

Page 25: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 25

Algoritmo de DijkstraEjemplo (cont.)

V Dv PvConoc.

1 0 0 1

2 25 6 0

3 40 1 0

4 ∞ 0 0

5 10 1 0

6 5 1 1

s

•Valores al seleccionar el vértice 6

•Actualiza la distancia de 2

Page 26: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

2626

Algoritmo de DijkstraEjemplo (cont.)

V Dv PvConoc.

1 0 0 1

2 25 6 0

3 40 1 0

4 ∞ 0 0

5 10 1 0

6 5 1 1

s

Page 27: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 27

Algoritmo de DijkstraEjemplo (cont.)

V Dv PvConoc.

1 0 0 1

2 25 6 0

3 40 1 0

4 30 5 0

5 10 1 1

6 5 1 1

s

•Valores al seleccionar el vértice 5

•Actualiza la distancia de 4

Page 28: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 28

Algoritmo de DijkstraEjemplo (cont.)

Los próximos vértices a elegir son: 2, 4 y 3 en ese orden.

V Dv PvConoc.

1 0 0 1

2 25 6 1

3 35 4 1

4 30 5 1

5 10 1 1

6 5 1 1El resultado final es:

Page 29: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 29

Algoritmo de Dijkstra Dijkstra(G,w, s){(1) para cada vértice v Є V hacer

(2) Dv = ∞; Pv = 0;(3) fin para(4) Ds = 0; (5) para cada vértice v Є V hacer(6) u = vérticeDesconocidoMenor Dist; (7) Marcar u como conocido;(8) para cada vértice w Є V adyacente a u hacer(9) si w no está conocido entonces(10) si Dw > Du + c(u,w) entonces(11) Dw = Du + c(u,w);(12) Pw = u;(13) fin si(14) fin si(15) fin para(16) fin para }

Page 30: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 30

Algoritmo de DijkstraTiempo de ejecución (I)

El bucle para de la línea (5) se ejecuta para todos los vértices |V| iteraciones

La operación vérticeDesconocidoMenorDist es O(|V|) y dado que se realiza |V| veces el costo total de vérticeDesconocidoMenorDist es O(|V|2)

El bucle para de la línea (8) se ejecuta para los vértices adyacentes de cada vértice. El número total de iteraciones será la cantidad de aristas del grafo. |E| iteraciones

El costo total del algoritmo es (|V|2 + |E| ) es O(|V|2)

Page 31: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 31

Algoritmo de DijkstraTiempo de ejecución (II)

Optimización: la operación vérticeDesconocidoMenorDist es más eficiente si almacenamos las distancias en una heap.

La operación vérticeDesconocidoMenorDist es O(log|V|) y dado que se realiza |V| veces

el costo total de vérticeDesconocidoMenorDist es O(|V| log |V|)

El bucle para de la línea (8) supone modificar la prioridad (distancia) y reorganizar la heap. Cada iteración es O(log|V|)

realiza|E| iteraciones, O(|E| log|V|)

El costo total del algoritmo es (|V| log|V|+ |E| log|V|) es O(|E| log|V|)

Page 32: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 32

Algoritmo de DijkstraTiempo de ejecución (III)

Variante: usando heap la actualización de la línea (11) se puede resolver insertando w y su nuevo valor Dw cada vez que éste se

modifica.

El tamaño de la heap puede crecer hasta |E|. Dado que |E| ≤ |V|2, log |E| ≤ 2 log |V|, el costo total del algoritmo no varía

El costo total del algoritmo es O(|E| log|V|)

Page 33: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 33

Algoritmos de Caminos mínimosGrafos con pesos positivos y negativos

Estrategia: Encolar los vérticesSi el grafo tiene aristas negativas, el algoritmo de Dijkstra puede dar un resultado erróneo.

s

uv

-5

-10

2

V Dv Pv Conoc.

s 0 0 1

u -5 s 1

v 2 s 1Error !!La distancia mínima de s a u es -8

Page 34: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 34

Algoritmos de Caminos mínimosGrafos con pesos positivos y negativos (cont.)

Pasos: Encolar el vértice origen s . Procesar la cola:

Desencolar un vértice. Actualizar la distancia de los adyacentes Dw siguiendo

el mismo criterio de Dijkstra. Si w no está en la cola, encolarlo.

El costo total del algoritmo es O(|V| |E|)

Page 35: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 35

Algoritmos de Caminos mínimosGrafos acíclicos

Estrategia: Orden Topológico Optimización del algoritmo de Dijkstra La selección de cada vértice se realiza siguiendo el orden

topológico Esta estrategia funciona correctamente, dado que al

seleccionar un vértice v, no se va a encontrar una distancia dv menor, porque ya se procesaron todos los caminos que llegan a él

El costo total del algoritmo es O(|V| + |E|)

Page 36: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 36

Algoritmos de Caminos mínimosGrafos acíclicos

Camino_min_GrafoDirigidoAcíclico(G,s)

Ordenar topológicamente los vértices de G;

Inicializar Tabla de Distancias(G, s);

para c/vértice u del orden topológico hacer para c/vértice w Є V adyacente a u hacer si Dw > Du + c(u,w) entonces

Dw = Du + c(u,w);

Pw = u;

Page 37: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 37

Algoritmos de Caminos mínimosGrafos acíclicos

Camino_min_GrafoDirigidoAcíclico(G,s) {Calcular el grado_in de todos los vérticesEncolar en Q los vértices con grado_in = 0para cada vértice v Є V hacer

Dv = ∞; Pv = 0;fin paraDs = 0;Mientras (!esVacio(Q)) hacer Desencolar(Q,u);

para c/vértice w Є V adyacente a u hacer Decrementar grado de entrada de w si grado_in[w] = 0 entonces Encolar(Q,w);

si Du != ∞ entonces si Dw > Du + c(u,w) entonces

Dw = Du + c(u,w); Pw = u; fin si fin parafin mientras

}

Page 38: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 38

Caminos mínimos entre todos los pares de vértices

Estrategia: Algoritmo de Floyd

Lleva dos matrices D y P, ambas de |V| x |V|

Matriz de costos Matriz de vértices mínimos intermedios

El costo total del algoritmo es O(|V|3)

Page 39: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 39

Algoritmo de Floyd

para k=1 hasta cant_Vértices(G) hacer para i=1 hasta cant_Vértices(G) hacer

para j=1 hasta cant_Vértices(G) hacer si D[i,j] > D[i,k] + D[k,j] entonces

D[i,j] = D[i,k] + D[k,j]; P[i,j] = k; fin si fin para fin parafin para

Toma cada vértice como intermedio, para calcular los caminos

Distancia entre los vértices i y j , pasando por k

Page 40: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 40

Agenda - Grafos

• Caminos de costo mínimo

• Árbol de expansión mínimo

Page 41: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 41

Agenda – Grafos

Árbol de expansión mínimo

Definición

Algoritmo de Prim

Algoritmo de Kruskal

Page 42: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 42

Árbol de expansión mínimaDefinición

Dado un grafo G=(V , E) no dirigido y conexo

El árbol de expansión mínima es un árbol formado por las aristas de G que conectan todos los vértices con un

costo total mínimo.

Page 43: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 43

Árbol de expansión mínimaAlgoritmo de Prim

Construye el árbol haciéndolo crecer por etapas

En cada etapa:- elige un vértice como raíz

- le agrega al árbol una arista y un vértice asociado

Selecciona la arista (u ,v) de mínimo costo que cumpla: u ∈ árbol y v ∉ árbol

Page 44: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 44

Árbol de expansión mínimaAlgoritmo de Prim (cont.)

Construye el árbol haciéndolo crecer por etapas

Ejemplo:

Nodo raíz

Se agrega la arista (1,3) y el vértice 3

1° Paso

Page 45: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 45

Árbol de expansión mínimaAlgoritmo de Prim (cont.)

Se agrega la arista (3,6) y el vértice 6

2° Paso 3° Paso

Se agrega la arista (6,4) y el vértice 4

4° y 5° Pasos

- Se agrega la arista (3,2) y el vértice 2

- Se agrega la arista (2,5) y el vértice 5

Page 46: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 46

Algoritmo de PrimImplementación

La implementación es muy similar al algoritmo de Dijkstra

Se modifica la forma de actualizar la distancia de los adyacentes:

Se compara Dw con c(v,w)

Se actualiza si Dw > c(v,w)

Distancia mínima a w (sin

tener en cuenta v)Distancia de v a w

Page 47: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 47

Algoritmo de PrimTiempo de Ejecución

Se hacen las mismas consideraciones que para el algoritmo de Dijkstra

Si se implementa con una tabla secuencial:

El costo total del algoritmo es O(|V|2)

Si se implementa con heap:

El costo total del algoritmo es O(|E| log|V|)

Page 48: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 48

Árbol de expansión mínimaAlgoritmo de Kruskal

Selecciona las aristas en orden creciente según su peso y las acepta si no originan un ciclo

El invariante que usa me indica que en cada punto del proceso, dos vértices pertenecen al mismo conjunto si y sólo sí están conectados

Si dos vértices u y v están en el mismo conjunto, la arista (u ,v) es rechazada porque al aceptarla forma un ciclo

Page 49: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 49

Árbol de expansión mínimaAlgoritmo de Kruskal (cont.)

Inicialmente cada vértice pertenece a su propio conjunto

|V| conjuntos con un único elemento

Al aceptar una arista se realiza la Unión de dos conjuntos

Las aristas se organizan en una heap, para ir recuperando la de mínimo costo en cada paso

Page 50: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 50

Árbol de expansión mínimaAlgoritmo de Kruskal (cont.)

Ejemplo:

Page 51: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 51

Árbol de expansión mínimaAlgoritmo de Kruskal (cont.)

Inicialmente cada vértice está en su propio conjunto

Se agrega la arista (1,2)

Se agrega la arista (3,6)

Se agrega la arista (4,6)

Page 52: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 52

Árbol de expansión mínimaAlgoritmo de Kruskal (cont.)

Se agrega la arista (2,6) Se agrega la arista (3,5)

Page 53: Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014

Algoritmos y Estructuras de Datos 53

Algoritmo de KruskalTiempo de Ejecución

Se organizan las aristas en una heap, para optimizar la recuperación de la arista de mínimo costo

El tamaño de la heap es |E|, y extraer cada arista lleva O(log |E|)

El tiempo de ejecución es O(|E |log|E|)

Dado que |E| ≤ |V|2, log |E| ≤ 2 log |V|,

el costo total del algoritmo es O(|E |log|V|)