estructura de datos 4 grafos dirigidos m. en c. j. jesús arellano pimentel

31
Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

Upload: veronica-segura-bustos

Post on 24-Jan-2016

236 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

Estructura de Datos

4 Grafos Dirigidos

M. en C. J. Jesús Arellano Pimentel

Page 2: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4 Grafos Dirigidos

• 4.1. Definiciones fundamentales• 4.2. Representaciones de Grafos dirigidos.• 4.3.Problema de los caminos más cortos con

un solo origen.• 4.4. Problema de los caminos más cortos

entre todos los pares.• 4.5. Recorridos en grafos dirigidos• 4.6. Grafos dirigidos acíclicos • 4.7. Componentes fuertes

Page 3: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.1. Definiciones fundamentales (I)

• Los grafos representan relaciones arbitrarias entre objetos de datos.

• Un grafo dirigido G consiste en un conjunto de vértices V y un conjunto de arcos A.

• Los vértices también se denominan nodos o puntos.

• Un arco es un par ordenado de vértices (v, w); donde v es la cola y w la cabeza del arco.

– Se expresa como: v w– Se representa como:

• Se dice que:– El arco v w, va de v a w– Y que w es adyacente a v

v w

Page 4: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

• La siguiente figura presenta un grafo dirigido con cuatro vértices y cinco arcos.

• Los vértices pueden usarse para representar objetos, y los arcos, relaciones entre los objetos.

– Por ejemplo: los vértices pueden representar ciudades, y los arcos, vuelos aéreos de una ciudad a otra.

4.1. Definiciones fundamentales (II)

1

3 4

2

Page 5: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

• Un camino en un grafo dirigido es una secuencia de vértices v1, v2, …, vn, tal que v1v2, v2v3, …, vn-1vn, son arcos. Este camino va del vértice v1 al vértice vn y pasa por los vértices v2, v3, …, vn-1, y termina en el vértice vn.

• La longitud del camino es el número de arcos en ese camino (n-1 para el caso anterior).

– Un vértice sencillo v, por si mismo denota un camino de longitud 0 que va de v a v.

– En la figura anterior la secuencia 1,2,4, es un camino de longitud 2 que va del vértice 1 al vértice 4.

4.1. Definiciones fundamentales (III)

Page 6: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

• Un camino es simple si todos sus vértices, excepto tal vez el primero y el último, son distintos.

• Un ciclo simple es un camino de longitud por lo menos uno, que empieza y termina en el mismo vértice.

• Es útil asociar información a los vértices y arcos de un grafo dirigido.

– Las etiquetas pueden estar en los vértices y/o en los arcos.

– Un vértice puede tener a la vez un nombre y una etiqueta.

4.1. Definiciones fundamentales (IV)

Page 7: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.2. Representaciones de grafos dirigidos (I)

• Para representar un grafo dirigido se pueden emplear varias estructuras de datos. Todo depende de las operaciones que se aplicarán a los vértices y a los arcos.

• Una representación común para un grafo dirigido G = (V, A) es la matriz de adyacencia.

– Para V = {1, 2, …, n}• La matriz de adyacencia es de dimensión n x n• Dicha matriz contiene elementos booleanos• Un elemento i,j es verdadero si y sólo si existe un arco del

vértice i al vértice j.

Page 8: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.2. Representaciones de grafos dirigidos (II)

• Matriz de adyacencia– Ventajas:

• Tiempo de acceso independiente del tamaño de V y A.

• Es útil en algoritmos en los cuales es necesario saber si un arco dado está presente.

– Desventajas:• Ocupa el espacio para

alojar n2 arcos aún cuando quizá solo se tengan n arcos.

• Examinar completamente matrices grandes ocupa bastante tiempo.

1

4 3

2

Grafo dirigido de transiciones

a

a

a

a

b b b b

Matriz de adyacencia etiquetada

1 2 3 4

1

2

3

4

b

b

b

b

a

a

a

a

Page 9: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.2. Representaciones de grafos dirigidos (III)

• Otra representación para grafos dirigidos es mediante la lista de adyacencia.

– La lista de adyacencia para un vértice i es una lista, en algún orden, de todos los vértices adyacentes a i.

– Se puede representar el grafo G por un arreglo unidimensional donde cada elemento es un apuntador a la lista de adyacencia del vértice.

– La ventaja es que se utiliza un espacio proporcional al número de vértices.

– La desventaja es que el tiempo para determinar si existe un arco se incrementa en función de la cantidad de vértices.

Lista de adyacencia

1

2

3

4

2

4

2

3

3

1

3 4

2

Page 10: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.3. Problema de los caminos más cortos con un solo origen (I)

• Para un grafo G=(V, A) en el cual cada arco tiene una etiqueta no negativa, y donde un vértice se especifica como origen. El problema es determinar el costo del camino más corto del origen a todos los demás vértices de V, donde la longitud de un camino es la suma de los costos de los arcos del camino.

Page 11: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.3. Problema de los caminos más cortos con un solo origen (II)

1

2 5

3 4

10

50

20

10

30

60

100

Grafo dirigido con arcos etiquetados

Page 12: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.3. Problema de los caminos más cortos con un solo origen (III)

• En la solución de este problema se maneja una técnica “ávida” conocida como algoritmo de Dijkstra.

– Opera a partir de un conjunto de S vértices cuya distancia más corta desde el origen ya es conocida.

– En principio S contiene solo el vértice de origen.

– En cada paso, se agrega algún vértice restante v a S, cuya distancia desde el origen es la más corta.

– Suponiendo que todos los arcos tienen costos no negativos, siempre es posible encontrar un camino más corto entre el origen y v que pasa sólo a través de los vértices de S, y que se llama especial.

– En cada paso del algoritmo se utiliza un arreglo D para registrar la longitud del camino más corto a cada vértice.

– Una vez que S incluye todos los vértices, todos los caminos son especiales, así que D contendrá la distancia más corta del origen a cada vértice.

El algoritmo supone que existe:– Un grafo dirigido G =(V, A) en el

que V={1, 2, ..., n} y el vértice 1 es el origen.

– Un arreglo bidimensional C de costos, donde C[i][j] es el costo de ir del vértice i al vértice j por el arco ij, si no existe ij entonces el costo será .

– En cada paso, D[i] contiene la longitud del camino especial más corto actual para el vértice i.

1

2 5

3 4

10

50

20

10

30

60

100

Page 13: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.3. Problema de los caminos más cortos con un solo origen (IV)

Algoritmo de Dijkstra.

S = {1};

para i = 2 hasta n hacer

D[i ] = C[1][i ];

para i = 1 hasta n-1 hacer

elige un vértice w en V-S tal que D[w] sea un mínimo;

agrega w a S;

para cada vértice v en V-S hacer

D[v] = min(D[v], D[w] + C[w][v]);

1

2 5

3 4

10

50

20

10

30

60

100

Page 14: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.3. Problema de los caminos más cortos con un solo origen (V)

Algoritmo de Dijkstra.

S = {1};para i = 2 hasta n hacer

D[i ] = C[1][i ];para i = 1 hasta n-1 hacer

elige un vértice w en V-S tal que D[w] sea un mínimo;agrega w a S;para cada vértice v en V-S hacer

D[v] = min(D[v], D[w] + C[w][v]);

1

2 5

3 4

10

50

20

10

30

60

100

C =1 2 3 4 5

1

2

3

4

5

0 10 30 100

0 50

0 10

20 0 60

0

i V S w V-S v D[2] D[3] D[4] D[5] D[w] + C[w][v]

{1,2,3,4,5} {1} 10 30 100

1 {2, 3, 4, 5}2{1,2}{3, 4, 5} 3 10 + 50 = 6060

4 10 + = 30

5 10 + = 100

2 4{1,2,4} {3, 5} 3 30 + 20 = 50505 30 + 60 = 9090

3 3{1,2,4,3} { 5} 5 50 + 10 = 6060

4 5{1,2,4,3,5} { }

{1,2,3,4,5} {1,2,4,3,5} 10 50 30 60

Page 15: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.3. Problema de los caminos más cortos con un solo origen (VI)

Algoritmo de Dijkstra y recuperación de caminos.

S = {1};para i = 2 hasta n hacer

D[i ] = C[1][i ];para i = 1 hasta n-1 hacer

elige un vértice w en V-S tal que D[w] sea un mínimo;agrega w a S;para cada vértice v en V-S hacer

D[v] = min(D[v], D[w] + C[w][v]);si D[w] + C[w][v] < D[v] entonces

P[v] = w;

1

2 5

3 4

10

50

20

10

30

60

100

C =1 2 3 4 5

1

2

3

4

5

i V S w V-S v D[2] D[3] D[4] D[5] D[w] + C[w][v] P

0 10 30 100

0 50

0 10

20 0 60

0

{1,2,3,4,5} {1} 10 30 100

1 {2, 3, 4, 5}2{1,2} 3 10 + 50 = 6060

30

100

P[3] = 2

{3, 4, 5} 4 10 + =

P[2]=P[4]=P[5]=1

5 10 + = 2 4{1,2,4} {3, 5} 3 30 + 20 = 5050

5 30 + 60 = 90903 3{1,2,4,3} { 5} 5 50 + 10 = 6060

4 5{1,2,4,3,5} { }

{1,2,3,4,5} {1,2,4,3,5} 10 50 30 60

P[3] = 4

P[5] = 4

P[5] = 3

P[2] = 1 P[3] = 4 P[4] = 1 P[5] = 3

Page 16: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.4. Problema de los caminos más cortos entre todos los pares (I)

• Para un grafo G=(V, A) en el cual cada arco tiene un costo no negativo, el problema es encontrar el camino de longitud más corta entre cada par ordenado de vértices (v , w).

Page 17: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.4. Problema de los caminos más cortos entre todos los pares (II)

• La solución podría estar en aplicar Dijkstra, tomando cada vértice como origen.

• Un solución más directa es aplicar el algoritmo de R. W. Floyd.

– Supone que los vértices v están numerados como 1, 2, …, n.– Utiliza una matriz A de n x n en la cual se calculan las

longitudes de los caminos más cortos.– Inicialmente A[i][j] = C[i][j] para toda i ≠ j.

• Si no existe un arco de i a j C[i][j] = .• Cada elemento de la diagonal se hace 0.

– Se hacen n iteraciones sobre la matriz. Al final de la k-ésima iteración, A[i][j] tendrá la longitud más pequeña que vaya desde el vértice i hasta el vértice j y que no pase por un vértice con un número mayor que k.

Page 18: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.4. Problema de los caminos más cortos entre todos los pares (III)

• Algoritmo de Floyd.– En la k-ésima iteración aplica la fórmula:

Ak-1[i][j]

Ak[i][j] = min

Ak-1[i,k] + Ak-1[k,j]

k

i jAk-1[i][j]

Ak-1[k][j]Ak-1[i][k]

Page 19: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.4. Problema de los caminos más cortos entre todos los pares (IV)

Algoritmo de Floyd.

para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ];para i = 1 hasta n hacer A[i ][i ] = 0;para k = 1 hasta n hacer para i = 1 hasta n hacer para j = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ]

k

i jAk-1[i][j]

Ak-1[k][j]Ak-1[i][k]

Page 20: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.4. Problema de los caminos más cortos entre todos los pares (V)

Algoritmo de Floyd.

para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ];para i = 1 hasta n hacer A[i ][i ] = 0;para k = 1 hasta n hacer para i = 1 hasta n hacer para j = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ]

1 2 3

5

3

8

22

C = 1 2 3

1

2

3

2 8 5

3 0

2 0

Se copia C en A

A = 1 2 3

1

2

3

2 8 5

3 0

2 0

La diagonal de A se hace 0’s

A = 1 2 3

1

2

3

0 8 5

3 0

2 0

Para k = 1

A = 1 2 3

1

2

3

Para k = 2

A = 1 2 3

1

2

3

Para k = 3

A = 1 2 3

1

2

3

i j i j i j

1 1 02

8

3

5

2 1 32

0

3

8

3 1 2

2

3

0

1 1 02

8

3

5

2 1 32

0

3

8

3 1 5

2

2

3

0

1 1 02

7

3

5

2 1 32

0

3

8

3 1 5

2

2 0

Page 21: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.4. Problema de los caminos más cortos entre todos los pares (VI)

Algoritmo de Floyd con recuperación de caminos.

para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ]; P[i ][ j ] = 0;para i = 1 hasta n hacer A[i ][i ] = 0;para k = 1 hasta n hacer para i = 1 hasta n hacer para j = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ] P[i ][ j ] = k;

Se agrega una Matriz P donde P[i ][ j ] tiene el vértice k que permitió a Floyd encontrar el valor más pequeño.

Si P[i ][ j ] es 0 entonces el camino de i a j es directo

Page 22: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.4. Problema de los caminos más cortos entre todos los pares (VII)

Algoritmo de Floyd.

para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ]; P[i ][ j ] = 0;para i = 1 hasta n hacer A[i ][i ] = 0;para k = 1 hasta n hacer para i = 1 hasta n hacer para j = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ] P[i ][ j ] = k;

1 2 3

5

3

8

22

Se inicializa P con ceros

P = 1 2 3

1

2

3

0 0 0

0 0 0

0 0 0

La diagonal de A se hace 0’s

A = 1 2 3

1

2

3

0 8 5

3 0

2 0

Para k = 1

A = 1 2 3

1

2

3

Para k = 2

A = 1 2 3

1

2

3

Para k = 3

A = 1 2 3

1

2

3

i j i j i j

1 1 02

8

3

5

2 1 32

0

3

8

3 1 2

2

3

0

1 1 02

8

3

5

2 1 32

0

3

8

3 1 5

2

2

3

0

1 1 02

7

3

5

2 1 32

0

3

8

3 1 5

2

2 0

1

2

3

Page 23: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.5. Recorridos en grafos dirigidos (I)

• Consiste en visitar los vértices y los arcos de forma sistemática.

• Se utiliza la búsqueda en profundidad– Es una generalización del recorrido en

orden previo de un árbol.– Ayuda a resolver con eficiencia muchos

problemas relacionados con grafos dirigidos.

Page 24: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.5. Recorridos en grafos dirigidos (II)

• La búsqueda en profundidad trabaja de la siguiente forma:

1. Para un grafo dirigido G en un principio se marcan todos los vértices de G como no visitados.

2. Se selecciona un vértice v como punto de partida; v se marca como visitado.

3. Después se recorre cada vértice adyacente a v que no se haya visitado y se marca como visitado, aplicando de forma recursiva este paso (3).

4. Una vez que se hayan visitado todos los vértices alcanzables desde v, la búsqueda esta completa.

5. Si algunos vértices de G quedan sin visitar, se selecciona uno de ellos como vértice de partida repitiendo el proceso desde el paso 2 hasta que todos los vértices de G se hayan visitado.

Page 25: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.5. Recorridos en grafos dirigidos (III)

• Para aplicar la búsqueda en profundidad se pueden utilizar:

– Un lista de adyacencia (L[v]) para representar los vértices adyacentes al vértice v, y

– Un arreglo marca cuyos elementos son del tipo (VISITADO, NOVISITADO), para saber si el vértice ya fue visitado o no.

– El procedimiento se inicia de la siguiente forma:para v = 1 hasta n hacer

marca[v] = NOVISITADO;para v = 1 hasta n hacer

si marca[v] == NOVISITADO entoncesbpf(v);

Page 26: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.5. Recorridos en grafos dirigidos (IV)

• El algoritmo para el procedimiento que realiza la búsqueda en profundidad (bpf) es el siguiente:

bpf( v ){

marca[v] = VISITADO;

para cada vértice w en L[v] hacer

si marca[w] == NOVISITADO entonces

bpf( w );

}

Page 27: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.5. Recorridos en grafos dirigidos (V)

v bpf( v )para v = 1 hasta n hacer

A bpf ( A ) A VISITADOw en L[A] bpf ( w )

B bpf ( B ) B VISITADOw en L[B] bpf ( w )

C bpf ( C ) C VISITADOw en L[C] bpf ( w )

A

D bpf ( D ) D VISITADOw en L[D] bpf ( w )

A

C

E bpf ( E ) E VISITADOw en L[E] bpf ( w )

F bpf ( F ) F VISITADOw en L[F] bpf ( w )

B

G bpf ( G ) G VISITADOw en L[G] bpf ( w )

D

F

B

C

D

F

G

E

F

G

B

D

A

C

A

B

C

E

D

F

G

marca[v]

NOVISITADO

NOVISITADO

NOVISITADO

NOVISITADO

NOVISITADO

NOVISITADO

NOVISITADO

1

2

3

5

4

6

7

Lista de adyacencia L[v]

A

B

C

E

D

F

G

B

C D

A

A C

F G

B

D F

para v = 1 hasta n hacer marca[v] = NOVISITADO;para v = 1 hasta n hacer si marca[v] == NOVISITADO entonces bpf(v);

bpf( v ){ marca[v] = VISITADO; para cada vértice w en L[v] hacer si marca[w] == NOVISITADO

entonces bpf( w );}

VISITADO

VISITADO

VISITADO

VISITADO

VISITADO

VISITADO

VISITADO

Page 28: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.6. Grafos dirigidos acíclicos (I)

• Un grafo dirigido acíclico, o gda, es un grafo dirigido sin ciclos.

• Los gda son más generales que los árboles, pero menos que los grafos dirigidos arbitrarios, si se cuantifican las relaciones que presentan.

A

B C

D E

Árbol

A

B C

D E

Gda Grafo dirigido

A

B C

D E

Page 29: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.6. Grafos dirigidos acíclicos (II)

• Entre otras cosas los grafos dirigidos acíclicos son útiles para la representación de la estructura sintáctica de expresiones aritméticas con subexpresiones comunes.

– Por ejemplo la expresión: ( (a + b) * c + ((a + b) + e) * (e + f) ) * ((a + b) * c)

a b

+

*

c

+

*

+

e

+

f

*

Page 30: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.6. Grafos dirigidos acíclicos (III)

v bpf( v )para v = 1 hasta n hacer

A bpf ( A ) A VISITADOw en L[A] bpf ( w )

B bpf ( B ) B VISITADOw en L[B] bpf ( w )

C bpf ( C ) C VISITADOw en L[C] bpf ( w )

A

D bpf ( D ) D VISITADOw en L[D] bpf ( w )

A

C

E bpf ( E ) E VISITADOw en L[E] bpf ( w )

F bpf ( F ) F VISITADOw en L[F] bpf ( w )

B

G bpf ( G ) G VISITADOw en L[G] bpf ( w )

D

F

B

C

D

F

G

E

F

G

B

D

A

C

Prueba de aciclicidad

Si se encuentra un arco de retroceso durante la búsqueda de profundidad, entonces el grafo tiene un ciclo.

A

B

C DÁrbol abarcador en profundidad para A

E

F G

Árbol abarcador en profundidad para B

Bosque abarcador de profundidad

Page 31: Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4.5. Componentes fuertes (I)

• Un componente fuertemente conexo de un grafo dirigido es un conjunto máximo de vértices en el cual existe un camino que va desde cualquier vértice del conjunto hasta cualquier otro vértice también del conjunto.

• La búsqueda en profundidad puede utilizarse para determinar con eficiencia los componentes fuertemente conexos de un grafo dirigido

A B

D C

Grafo dirigido

A B

D C

Componentes fuertes

A,B,C

D

Grafo reducido