El documento presenta una agenda para una clase sobre algoritmos y estructuras de datos que incluye los temas de digrafos, DFS dirigido, alcanzabilidad, fuertemente conexo, clausura transitiva, grafos ponderados y el problema del camino más corto. Explica conceptos como digrafos, DFS dirigido, alcanzabilidad, fuertemente conexo y presenta algoritmos como el algoritmo fuertemente conexo, Floyd-Warshall y Dijkstra para resolver problemas sobre estos temas.
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Algoritmos y estructuras de datos II: DiGrafos
1. 13/09/2011
Algoritmos y Estructura de Datos II Agenda
2
Digrafo
DFS Dirigido
DIGRAFOS Alcanzabilidad
Algoritmos y Estructura de Datos II
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
UCSM - 2011 Karim Guevara Puente de la Vega
DiGrafos DFS Dirigido
3 4
Es un grafo cuyas aristas son Especialización de los algoritmos DFS y BFS, para
todas dirigidas recorrer un grafo a lo largo de la dirección de sus aristas
Propiedades En el algoritmo DFS dirigido, se tiene cuatro tipos de
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
Sea un grafo G=(V, E) tal que aristas:
cada arista va en una arista discovery, back, fordward, cross
dirección DFS dirigido determina a que vertices podemos llagar a
Si G es simple, m≤n(n-1) partir de un vértice determinado s.
Aplicaciones
Planificación: Arista (a,b)
significa que la tarea a debe
ser completada antes que la
tarea b empiece
DFS Dirigido Alcanzabilidad
5 6
Back edge(v,w) El árbol DFS con raíz en v:
Back edge
w es un ancestro de v en el árbol Forward edge Vértices alcanzables a partir de v vía las rutas dirigidas
de aristas descubiertas Cross edge
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
Forward edge(v,w) Discovery edge
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
1
2. 13/09/2011
Fuertemente conexo Algoritmo fuertemente conexo
7 8
Un dígrafo G es fuertemente conexo, si para cualquier Elija un vértice v en G
par de vértices u y v de G, u es alcanzable desde v, y Realizar DFS desde v
viceversa Si hay algún vértice w no
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
Cada vértice es alcanzable desde todos los vértices 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 Cálculo de la Clausura Transitiva
9 10
Dado un dígrafo G, la Se puede realizar DFS Si hay un
clausura transitiva de G es camino desde A
iniciando en cada a B y de B a C,
el dígrafo G* tal que: vértice entonces hay un
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
G* tiene los mismos vértices O(n(n+m)) camino desde A
que G aC
Si G tiene una ruta dirigida
de u a v (u≠v), G* tiene una Alternativamente…
arista dirigida desde u a v
aplicar Programación
La clausura transitiva provee dinámica: Algoritmo
información de la
Floyd-Warshall
alcanzabilidad del dígrafo
Floyd-Warshall: Clausura Transitiva Floyd-Warshall
11 12
Idea 1: número de vértices 1,2, …, n En v1
Idea 2: considerar las rutas que use solamente los
vértices 1,2, …, k como vértices intermedios
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
2
3. Algoritmos y Estructura de Datos II Algoritmos y Estructura de Datos II Algoritmos y Estructura de Datos II
17
15
13
En v5
En v3
En v1
Floyd-Warshall
Floyd-Warshall
Floyd-Warshall
En v2
En v6
En v4
Algoritmos y Estructura de Datos II Algoritmos y Estructura de Datos II Algoritmos y Estructura de Datos II
18
16
14
En v6
En v4
En v2
Floyd-Warshall
Floyd-Warshall
Floyd-Warshall
En v5
En v3
13/09/2011
3
4. 13/09/2011
Floyd-Warshall Algoritmo de Floyd-Warshall
19 20
En v7 Numera los vértices de G: v1, …,
vn y calcula una serie de
digrafos G0, …, Gn
G0 = G
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
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)
Algoritmos y Estructura de Datos II Grafos Ponderados
22
Un grafo ponderado es aquel, en donde cada una de las
aristas tiene un valor asociado, denominado peso.
RUTAS MINIMAS
Este peso puede representar: distancias, costos, etc.
Algoritmos y Estructura de Datos II
P.e.:
UCSM - 2011 Karim Guevara Puente de la Vega
Problema del camino más corto Problema del camino más corto
23 24
Dado un grafo ponderado y dos vértices u y v, encontrar Propiedad:
el camino con el menor peso que hay entre u y v. Una subruta de una ruta corta es por si misma una ruta corta
P.e.: el camino más corto entre PVD y HNL Una fuente de rutas cortas:
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
Aplicaciones: Dado un grafo ponderado G y un vértice s de G, las rutas más
Enrutamiento de paquetes en internet cortas de s a cada uno de los otros vértices los encontraremos en
un árbol.
Reservaciones de vuelos
P.e.: el árbol de rutas cortas desde Providence (PVD)
4
5. 13/09/2011
Algoritmo de Dijkstra Algoritmo de Dijkstra
25 26
El más famoso de los algoritmos para el cálculo del Funcionamiento del algoritmo:
camino de costo mínimo. Sea PERM el conjunto que contiene inicialmente el vértice
Escoge un vértice como raíz de la búsqueda. raíz s.
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
Luego calcula el costo mínimo para todos los demás PERM contiene todos los vértices para los cuales ya fueron
vértices. determinados los menores caminos usando apenas vértices
en PERM.
Puede ser usado en grafos dirigidos y no dirigidos.
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 Algoritmo de Dijkstra
27 28
Funcionamiento del algoritmo (cont.): P.e.:
Se toma el vértice (de los que aún no están en PERM) con la 1. Se define el nodo origen (s) y se lo incluye en PERM. Se
menor distancia D. atribuye cero a su distancia, el resto tiene distancia infinita ().
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
Este vértice es adicionado a PERM, lo llamaremos current, y
se recalculan las distancias (D) para los vértices adyacentes vértice PERM D path
a él y que no estén en PERM. s si 0 -
u no -
D[z] = min(D[z], D[z]+peso)
x no -
Puede haber un camino menor a partir de s pasando por el v no -
vértice current y no -
Si hay un camino más corto se necesita actualizar path[z]
Algoritmo de Dijkstra Algoritmo de Dijkstra
29 30
P.e.: P.e.:
2. A partir de s se calculan las distancias de los vértices 3. Entre los vértices que no pertenecen a PERM se escoge el de
adyacentes (u y x). A estos les llamaremos z: menor distancia (x).
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
if ( D[z] > D[s] + peso(s,z)){
D[z] = D[s] + peso(s,z);
path[z] = s;
}
vértice PERM D path
vértice PERM D path
s si 0 -
s si 0 -
u no 10 s
u no 10 s
x no 5 s
x no 5 s
v no -
v no -
y no -
y no -
5
6. 13/09/2011
Algoritmo de Dijkstra Algoritmo de Dijkstra
31 32
P.e.: P.e.:
4. Incluir a x en PERM y a partir de x se consultan los vértices 5. Entre todos los vértices que no pertenecen a PERM se escoge el
adyacentes a él que no estén en PERM (y, u y v), y se recalculan de menor distancia (y).
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
sus distancias.
vértice PERM D path vértice PERM D path
s si 0 - s si 0 -
u no 8 x u no 8 x
x si 5 s x si 5 s
v no 14 x v no 14 x
y no 7 x y no 7 x
Algoritmo de Dijkstra Algoritmo de Dijkstra
33 34
P.e.: P.e.:
6. Se incluye y en PERM y a partir de y se consultan los vértices 7. Entre todos los vértices que no están en PERM se escoge el de
adyacentes a él que no están en PERM (v), calcular sus menor distancia (u).
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
distancias.
vértice PERM D path vértice PERM D path
s si 0 - s si 0 -
u no 8 x u no 8 x
x si 5 s x si 5 s
v no 13 y v no 13 y
y si 7 x y si 7 x
Algoritmo de Dijkstra Algoritmo de Dijkstra
35 36
P.e.: P.e.:
8. Se incluye u a PERM y a partir de u se consultan los vértices 9. Entre todos los vértices que no están en PERM se escoge el de
adyacentes a él que no estén en PERM para calcular sus menor distancia (v).
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
distancias.
vértice PERM D path vértice PERM D path
s si 0 - s si 0 -
u si 8 x u si 8 x
x si 5 s x si 5 s
v no 9 u v no 9 u
y si 7 x y si 7 x
6
7. 13/09/2011
Algoritmo de Dijkstra Algoritmo de Dijkstra
37 38
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.
Algoritmos y Estructura de Datos II
Algoritmos y Estructura de Datos II
vértice PERM D path
s si 0 -
u si 8 x
x si 5 s
v si 9 u
y si 7 x
Extensión del algoritmo Dijkstra
39
Se puede extender el Algorithm DijstraShortestPathsTree(G,s)
algoritmo de Dijkstra .. .
para retornar el árbol for all v G.vertices()
.. .
Algoritmos y Estructura de Datos II
de rutas cortas desde
un vertice inicial a todos P[v] =
los otros vértices. .. .
Se almacena con cada while Q.isEmpty()
vértice z etiquetas que u Q.removeMin()
permitan seguir el for each vertex z adjacent to n such
that z is in Q
camino de regreso (la
if D[z] > D[u]+weight(u,z) then
arista antecesora en el
D[z] D[u]+weight(u,z)
arbol):
change to D[z] the key of z in Q
Arreglo P[z]. P[z] edge(u,z)
7