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