u1 aed2 di_grafos_11

7
13/09/2011 1 DIGRAFOS Karim Guevara Puente de la Vega Algoritmos y Estructura de Datos II UCSM - 2011 Agenda Algoritmos y Estructura de Datos II 2 Digrafo DFS Dirigido Alcanzabilidad Fuertemente conexo Algoritmo fuertemente conexo Clausura transitiva Floyd-Warshall: clausura transtiva Algoritmo Floyd-Warshall Grafos ponderados Problema del camino más corto - ruta mínima Algoritmo de Dijkstra DiGrafos Algoritmos y Estructura de Datos II 3 Es un grafo cuyas aristas son todas dirigidas Propiedades Sea un grafo G=(V, E) tal que cada arista va en una dirección Si G es simple, m≤n(n-1) Aplicaciones Planificación: Arista (a,b) significa que la tarea a debe ser completada antes que la tarea b empiece DFS Dirigido Algoritmos y Estructura de Datos II 4 Especialización de los algoritmos DFS y BFS, para recorrer un grafo a lo largo de la dirección de sus aristas En el algoritmo DFS dirigido, se tiene cuatro tipos de aristas: arista discovery, back, fordward, cross DFS dirigido determina a que vertices podemos llagar a partir de un vértice determinado s. DFS Dirigido Algoritmos y Estructura de Datos II 5 Back edge(v,w) w es un ancestro de v en el árbol de aristas descubiertas Forward edge(v,w) v es un ancestro (pero no el padre) de w en el árbol de aristas descubiertas Cross edge(v,w) w esta en el mismo nivel que v o en el siguiente nivel en el árbol de aristas descubiertas Discovery edge(v,w) v es el padre de w en el árbol de aristas descubiertas Back edge Forward edge Cross edge Discovery edge Alcanzabilidad Algoritmos y Estructura de Datos II 6 El árbol DFS con raíz en v: Vértices alcanzables a partir de v vía las rutas dirigidas

Upload: lastimework

Post on 09-Jul-2015

1.171 views

Category:

Career


0 download

TRANSCRIPT

Page 1: U1 aed2 di_grafos_11

13/09/2011

1

DIGRAFOS

Karim Guevara Puente de la Vega

Algoritmos y Estructura de Datos II

UCSM - 2011

Agenda

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

2

Digrafo DFS Dirigido Alcanzabilidad Fuertemente conexo Algoritmo fuertemente conexo

Clausura transitiva Floyd-Warshall: clausura transtiva Algoritmo Floyd-Warshall

Grafos ponderados Problema del camino más corto - ruta mínima Algoritmo de Dijkstra

DiGrafos

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

3

Es un grafo cuyas aristas son todas dirigidas

Propiedades Sea un grafo G=(V, E) tal que

cada arista va en una dirección

Si G es simple, m≤n(n-1)

Aplicaciones Planificación: Arista (a,b)

significa que la tarea a debe ser completada antes que la tarea b empiece

DFS Dirigido

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

4

Especialización de los algoritmos DFS y BFS, para recorrer un grafo a lo largo de la dirección de sus aristas

En el algoritmo DFS dirigido, se tiene cuatro tipos de aristas: arista discovery, back, fordward, cross

DFS dirigido determina a que vertices podemos llagar a partir de un vértice determinado s.

DFS Dirigido

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

5

Back edge(v,w) w es un ancestro de v en el árbol

de aristas descubiertas Forward edge(v,w)

v es un ancestro (pero no el padre) de w en el árbol de aristas descubiertas

Cross edge(v,w) w esta en el mismo nivel que v o

en el siguiente nivel en el árbol de aristas descubiertas

Discovery edge(v,w) v es el padre de w en el árbol de

aristas descubiertas

Back edgeForward edgeCross edgeDiscovery edge

Alcanzabilidad

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

6

El árbol DFS con raíz en v: Vértices alcanzables a partir de v vía las rutas dirigidas

Page 2: U1 aed2 di_grafos_11

13/09/2011

2

Fuertemente conexo

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

7

Un dígrafo G es fuertemente conexo, si para cualquier par de vértices u y v de G, u es alcanzable desde v, y viceversa

Cada vértice es alcanzable desde todos los vértices

Algoritmo fuertemente conexo

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

8

Elija un vértice v en G Realizar DFS desde v

Si hay algún vértice w no visitado, imprimir “no”

Sea G’ el grafo G con los vértices invertidos Realizar DFS desde v in G’ si hay un w no visitado, imprimir

“no” sino, imprimir “si”

Tiempo de ejecución: O(n+m)

Clausura transitiva

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

9

Dado un dígrafo G, la clausura transitiva de G es el dígrafo G* tal que: G* tiene los mismos vértices

que G Si G tiene una ruta dirigida

de u a v (u≠v), G* tiene una arista dirigida desde u a v

La clausura transitiva provee información de la alcanzabilidad del dígrafo

Cálculo de la Clausura Transitiva

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

10

Se puede realizar DFS iniciando en cada vértice O(n(n+m))

Alternativamente… aplicar Programación dinámica: Algoritmo Floyd-Warshall

Si hay un camino desde Aa B y de B a C,

entonces hay un camino desde A

a C

Floyd-Warshall: Clausura Transitiva

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

11

Idea 1: número de vértices 1,2, …, n Idea 2: considerar las rutas que use solamente los

vértices 1,2, …, k como vértices intermedios

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

12

En v1

Page 3: U1 aed2 di_grafos_11

13/09/2011

3

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

13

En v1

En v2

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

14

En v3

En v2

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

15

En v3

En v4

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

16

En v4

En v5

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

17

En v5

En v6

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

18

En v6

Page 4: U1 aed2 di_grafos_11

13/09/2011

4

Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

19

En v7

Algoritmo de Floyd-Warshall

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

20

Numera los vértices de G: v1, …, vn y calcula una serie de digrafos G0, …, Gn

G0 = G Gk tiene una arista dirigida (vi,

vj) si G tiene una ruta dirigida desde vi a vj con vértices intermedios en el conjunto {v1,…,vk}

Se tiene que Gn = G* En la fase k, el digrafo Gk es

calculado desde Gk-1

Tiempo de ejecución: O(n3), asumiendo que areAdjacent es O(1)

RUTAS MINIMAS

Karim Guevara Puente de la Vega

Algoritmos y Estructura de Datos II

UCSM - 2011

Grafos Ponderados

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

22

Un grafo ponderado es aquel, en donde cada una de las aristas tiene un valor asociado, denominado peso.

Este peso puede representar: distancias, costos, etc. P.e.:

Problema del camino más corto

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

23

Dado un grafo ponderado y dos vértices u y v, encontrar el camino con el menor peso que hay entre u y v. P.e.: el camino más corto entre PVD y HNL Aplicaciones: Enrutamiento de paquetes en internet Reservaciones de vuelos

Problema del camino más corto

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

24

Propiedad: Una subruta de una ruta corta es por si misma una ruta corta

Una fuente de rutas cortas: Dado un grafo ponderado G y un vértice s de G, las rutas más

cortas de s a cada uno de los otros vértices los encontraremos en un árbol.

P.e.: el árbol de rutas cortas desde Providence (PVD)

Page 5: U1 aed2 di_grafos_11

13/09/2011

5

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

25

El más famoso de los algoritmos para el cálculo del camino de costo mínimo.

Escoge un vértice como raíz de la búsqueda. Luego calcula el costo mínimo para todos los demás

vértices. Puede ser usado en grafos dirigidos y no dirigidos.

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

26

Funcionamiento del algoritmo: Sea PERM el conjunto que contiene inicialmente el vértice

raíz s. PERM contiene todos los vértices para los cuales ya fueron

determinados los menores caminos usando apenas vértices en PERM.

Para cada vértice z fuera de PERM mantenemos la menor distancia en D[z] de s a z.

Es necesario almacenar también el vértice adyacente (precedente) a z en path[z].

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

27

Funcionamiento del algoritmo (cont.): Se toma el vértice (de los que aún no están en PERM) con la

menor distancia D. Este vértice es adicionado a PERM, lo llamaremos current, y

se recalculan las distancias (D) para los vértices adyacentes a él y que no estén en PERM.

D[z] = min(D[z], D[z]+peso) Puede haber un camino menor a partir de s pasando por el

vértice current Si hay un camino más corto se necesita actualizar path[z]

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

28

P.e.:1. Se define el nodo origen (s) y se lo incluye en PERM. Se

atribuye cero a su distancia, el resto tiene distancia infinita ().

vértice PERM D path

s si 0 -

u no -

x no -

v no -

y no -

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

29

P.e.:2. A partir de s se calculan las distancias de los vértices

adyacentes (u y x). A estos les llamaremos z:if ( D[z] > D[s] + peso(s,z)){

D[z] = D[s] + peso(s,z);path[z] = s;

}

vértice PERM D path

s si 0 -

u no 10 s

x no 5 s

v no -

y no -

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

30

P.e.:3. Entre los vértices que no pertenecen a PERM se escoge el de

menor distancia (x).

vértice PERM D path

s si 0 -

u no 10 s

x no 5 s

v no -

y no -

Page 6: U1 aed2 di_grafos_11

13/09/2011

6

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

31

P.e.:4. Incluir a x en PERM y a partir de x se consultan los vértices

adyacentes a él que no estén en PERM (y, u y v), y se recalculan sus distancias.

vértice PERM D path

s si 0 -

u no 8 x

x si 5 s

v no 14 x

y no 7 x

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

32

P.e.:5. Entre todos los vértices que no pertenecen a PERM se escoge el

de menor distancia (y).

vértice PERM D path

s si 0 -

u no 8 x

x si 5 s

v no 14 x

y no 7 x

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

33

P.e.:6. Se incluye y en PERM y a partir de y se consultan los vértices

adyacentes a él que no están en PERM (v), calcular sus distancias.

vértice PERM D path

s si 0 -

u no 8 x

x si 5 s

v no 13 y

y si 7 x

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

34

P.e.:7. Entre todos los vértices que no están en PERM se escoge el de

menor distancia (u).

vértice PERM D path

s si 0 -

u no 8 x

x si 5 s

v no 13 y

y si 7 x

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

35

P.e.:8. Se incluye u a PERM y a partir de u se consultan los vértices

adyacentes a él que no estén en PERM para calcular sus distancias.

vértice PERM D path

s si 0 -

u si 8 x

x si 5 s

v no 9 u

y si 7 x

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

36

P.e.:9. Entre todos los vértices que no están en PERM se escoge el de

menor distancia (v).

vértice PERM D path

s si 0 -

u si 8 x

x si 5 s

v no 9 u

y si 7 x

Page 7: U1 aed2 di_grafos_11

13/09/2011

7

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

37

P.e.:10. Finalmente v es incluido en PERM. En este punto todos los

vértices están en PERM y la búsqueda finaliza.

vértice PERM D path

s si 0 -

u si 8 x

x si 5 s

v si 9 u

y si 7 x

Algoritmo de Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

38

Extensión del algoritmo Dijkstra

Alg

oritm

os y

Est

ruct

ura

de D

atos

II

39

Se puede extender el algoritmo de Dijkstrapara retornar el árbol de rutas cortas desde un vertice inicial a todos los otros vértices.

Se almacena con cada vértice z etiquetas que permitan seguir el camino de regreso (la arista antecesora en el arbol):

Arreglo P[z].

Algorithm DijstraShortestPathsTree(G,s). . .for all v G.vertices(). . .

P[v] = . . .

whileQ.isEmpty()uQ.removeMin()for each vertex z adjacent to n such

that z is in Qif D[z] > D[u]+weight(u,z) then

D[z] D[u]+weight(u,z)change to D[z] the key of z in QP[z] edge(u,z)