grafos 2

21
1 GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec

Upload: hannitah

Post on 30-Jun-2015

7.013 views

Category:

Travel


0 download

TRANSCRIPT

Page 1: Grafos 2

1

GRAFOS: ALGORITMOS FUNDAMENTALES

ESTRUCTURAS DE DATOSwww.espol.edu.ec

www.fiec.espol.edu.ec

Page 2: Grafos 2

2

MATRIZ DE CAMINOS Es una matriz cuadrada P,

Que representa si hay o no camino Entre dos vértices Vi y Vj

hay lo no si 0,

caminohay Vy V entre si ,1 jiPij

Page 3: Grafos 2

3

CIERRE TRANSITIVO Es el grafo resultante de la matriz de caminos Si un grafo es fuertemente conexo

Su cierre transitivo es un grafo completo

Page 4: Grafos 2

4

UN POSIBLE ALGORITMO Entre Vi y Vj puede haber camino

Directo, cuando A[i][j] == 1, camino de long. 1 O pasando por otros vértices

Si solo analizamos pasar por un Vk extra Cuando A[i][k] == 1 && A[k][j] == 1, Long. 2 Si Vk puede ser V1 o V2 o … Vn, realmente

(A[i][1] && A[1][j]) || (A[i][2] && A[2][j]) || (A[i][n] && A[3][n])

Que representa A * A, A2

Nos indica solo si hay un camino de long. 2 entre Vi y Vj

La matriz de caminos indicara si hay camino ya sea De long. 1 o de long. 2 o de long. 3 o de long. N, es decir:

B = A + A2 + A3 + A4 +…. An

0 Bij si 0,

0 Bij si ,1Pij

Page 5: Grafos 2

5

WARSHALL: MAS EFICIENTE El anterior algoritmo

Es poco eficiente, peor Cuando el grafo tiene muchos vértices

Warshall propuso otro algoritmo Mas eficiente Calcular una secuencia de matrices cuadradas

De 0s(no hay camino) y 1s(hay camino) P0, P1, P2, P3… PN

La diferencia entre Pk y Pk-1 Se basa añadir un vértice Vk-1 al análisis Para saber y a través de Vk-1 hay camino entre V1 y Vj

Page 6: Grafos 2

6

COMO FUNCIONA Existe una matriz inicial P0

Indica si hay o no camino DIRECTO de Vi a Vj La matriz que le sigue P1

Indicaría si hay o no camino DIRECTO (Esto ya lo sabe P0) O pasando por V0 (añade este vértice al análisis)

P2 Indicaría si hay camino DIRECTO o pasando por V0 (Esto ya lo sabe P1) O pasando por V1

P3 Indicaría si hay camino DIRECTO o pasando por V0, o V1 (Lo sabe P2) O pasando por V2

Pk Indicaría lo que ya sabe Pk-1 O pasando por Vk-1

Page 7: Grafos 2

7

EL ALGORITMO ENTONCES Debemos encontrar Pn

Sabiendo que Pk[i][j] es 1 si Pk-1[i][j] es 1 o Pk-1[i][k] && Pk-1[k][j]

En otras palabras:

no si 0,

[k][j])P [i][k]P( [i][j]P si ,1 1-k1-k1-kPij

Page 8: Grafos 2

8

WARSHALL IMPLEMENTADOMatrizAdy Warshall(Grafo G){

int i, j, k;

MatrizAdy P;

CopiarMatrices(P, G.A);

for(k = 0; k < G.nvertices; k++){

for(i = 0; i < G.nvertices; i++){

for(j = 0; j < G.nvertices; i++){

P[i][j]= P[i][j] || (P[i][k] && P[k][j]);

}

}

}return P;

}

Page 9: Grafos 2

9

CAMINOS MAS CORTOS Frecuentemente, se desea conocer en una red

Cual es el camino mas corto Entre un par de vértices

En este caso Si importa cuantos caminos existen Si ya conozco un camino, pero encuentro uno mejor, sustituir

Se aplica el algoritmo de Dijkstra Es un algoritmo ávido, ya que Resuelve el problema en sucesivos pasos En cada paso

Selecciona la solución mas optima

Page 10: Grafos 2

10

DIJKSTRA Dado un V0, Dijkstra busca un conjunto D con

Las menores distancias de V0 al resto de vértices Al inicio, solo conocemos

Las distancias de los adyacentes D es inicializada a

Factor de peso para los adyacentes, Infinito para los no adyacentes

D va ser mejorado sucesivamente Escogiendo el vértice Vk no elegido antes

Que tenga la distancia mas corta V0, Vk

Probamos si pasando por Vk Se puede obtener distancias mas cortas de las que tenemos Para cada Vértice restante del grafo

Page 11: Grafos 2

11

EJEMPLO DE DIJKSTRA

V2 V5

V1

V3 V4

V6

38

5

34

7

3

2

Escogidos

Vértice Evaluado

D[0] D[1] D[2] D[3] D[4]D[5]

V1 V2 V3 V4 V5 V6

De V1 AL RESTO

V1 0 3 4 ∞ 8 ∞V1

1. D[] se inicializa con F.P. de adyacentes al origen

2. Escoger vértice Vk que no haya sido escogido, con la menor distancia del Vevaluado a Vk

V2

3. Revisar si alguna distancia puede ser mejorada pasando por Vk

Pasando por V2, Distancia de V1 a V5 seria 8, no hay

mejora

0 3 4 ∞ 8 ∞V1,V2

Repetir hasta k se hayan visitado todos los vértices

V3 0 3 4 ∞ 7 ∞V1,V2,V3

V5 0 3 4 14 7 10V1,V2,V3,V5

V6 0 3 4 12 7 10V1,V2,V3,V5,V6

Pasando por V3, Distancia de V1 a

V5 seria 7, CAMBIAR

Page 12: Grafos 2

12

DIKSTRA1. Se crea una lista de VDiks con todos los vértices del grafo,

y cada VDiks creado también se encola2. Se saca de la cola el menor VDiks por distancia(vmenor)3. Por cada VDiks v de la lista, se revisa

Si su vértice es adyacente al vértice de vmenor y si pasando por vmenorse puede conseguir una mejor distancia Si es así, se modifica v con los nuevos datos

4. Se repite todo desde el paso 2 hasta que no haya nada mas en la cola

Page 13: Grafos 2

13

CAMINOS MAS CORTOS ENTRE TODOS LOS PARES DE VERTICES Es una generalización de lo anterior Si se puede obtener la menor distancia

De un V0 al resto También se puede obtener

La menor distancia de todos los vértices Al resto

Se podría aplicar Dijkstra A cada vértice Y obtener n vectores D, o , una matriz F

Pero se puede aplicar otro algoritmo

Page 14: Grafos 2

14

FLOYD Este algoritmo se basa en Warshall

Se calculaba una secuencia de matrices Pk Cada Pk evaluaba dos opciones

Que Pk-1 indicara camino entre Vi y Vj o Que Pk-1 indicara camino entre Vi y Vj

Pasando por Vk

Floyd tambien calcula Fk, pero Cada Fk escogera la menor distancia entre

Distancia entre Vi y Vj, indicado por Fk-1 o Distancia entre Vi y Vj pasando por Vk, indicado por Fk-1

[k][j])) F[i][k] [i][j] ,(FMin(FFij k-k-k- 111

Page 15: Grafos 2

15

ARBOL DE EXPANSION DE COSTE MINIMO Dado un grafo G

No dirigido Valorado, con pesos no negativos

El árbol de expansión mínima Es un grafo parcial conexo a partir de G Tal que la suma de sus aristas sea mínima

Ejemplo de aplicación Redes de comunicaciones, de costo mínimo

Page 16: Grafos 2

16

ALGORITMO DE PRIM Dado el grafo, se debe seleccionar

Un vértice de inicio v Dicho vértice v se añade a un conjunto W Escoger el vértice u que no pertenezca a W

Adyacente a cualquiera de los vértices de W Y que tenga un costo mínimo

Añadir el vértice u al conjunto W Repetir proceso hasta que V == W

Page 17: Grafos 2

17

EJEMPLO

1 2 3

4 5 6

7

1

46

3

45

2

6

8

7

34

Desde 1

W = 1 , 2 , 3 , 4 , 5 , 7 , 6

Page 18: Grafos 2

18

PRIM1. Se crea un grafo nuevo con los

mismos vértices del grafo original2. vorigen se marca como visitado3. Los arcos de vorigen, cuyos vértices destino no han sido

visitados, se encolan por peso4. Se desencola el menor en peso de los arcos

no visitados(amenor) y su vértice destino se marca como visitado5. En el nuevo grafo,

se lanza el arco correspondiente a amenor(de ida y vuelta) 6. Se repite todo desde el punto 3 pero para

un vorigen igual al vértice del arco sacado(amenor)hasta que el numero de vértices marcados como visitadossea igual al numero de vértices del grafo

Page 19: Grafos 2

19

ALGORITMO DE KRUSKAL Kruskal se basa en el concepto de

Componentes conexas Sabemos que en el árbol de expansión

Deben aparecer todos los vértices de G Lo que no sabemos aun

Es que arcos escoger para unirlos Lo que a Kruskal le interesara elegir

Son los arcos, no los vértices, como en Prim

Page 20: Grafos 2

20

COMO FUNCIONA Primero añadir todos los vértices al árbol A

Estos forman n componentes conexas Luego elegir el arco de costo mínimo

Que no haya sido elegido anteriormente y que No una dos vértices de una misma componente

Este proceso se repite hasta que Se hayan unido todos los vértices Es decir, n-1 veces

Page 21: Grafos 2

21

EJEMPLO

1 2 3

4 5 6

7

1

4 6

3

45

2

68

734

Desde 1 1 2 3

4 5 6

7