Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 7
Clase 7
Febrero 2008
Outline
Grafos dirigidos
Outline
Grafos dirigidos
Grafos dirigidos
Un grafo dirigido es un grafo cuyas aristas son todas dirigidas (arcos)
8 1
0 6 7 2
Aplicaciones: transporte, planicaci on de tareas, cadena alimentar, calicaci on de sitios www, cadenas de dependencia. . .
, J.B. Hayet Programacion, Febrero 2008 4 / 57
Grafos dirigidos
Grafos dirigidos
De la misma manera que los no dirigidos, les podemos notar: G = (V , A) Un arco (v , w ) diere de (w , v ) Si G es simple, |A| |V |(|V | 1) Muchos grafos posibles con |V | aristas: 2|V |(|V |1) El grafo inverso es el grafo que se obtiene al cambiar la direcci on de todos los arcos
Grafos dirigidos
Grafos dirigidos
Un camino dirigido es una lista de v ertices en la que hay un arco conectando cada v ertice a su sucesor en la lista Un v ertice w es alcanzable desde otro v ertice v si existe un camino dirigido desde v hasta w La conectividad de esos grafos no se ve tan f acilmente que en el caso no dirigido; adem as, su estudio implica m as cosas que ver: en un grafo dirigido, si existe un camino de s a t , eso no permite inferir nada de que si existe entre t y s no obstante, vamos a re-utilizar mucho de lo que vimos para los no dirigidos
Grafos dirigidos
Grafos dirigidos
Grado entrante g + (v ): para un v ertice v , es el numero de arcos que llevan a este v ertice Grado saliente g (v ): para un v ertice, es el numero de arcos que salen de este v ertice Una fuente es un v ertice v tal que g + (v ) = 0 (no se puede alcanzar desde cualquier otro v ertice) Un pozo es un v ertice v tal que g (v ) = 0 (no se puede alcanzar ning un v ertice desde este)
Grafos dirigidos
0 6 7 2
0 0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0
0 1 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 0 0
0 0 1 0 1 0 0 0 0
0 0 0 0 1 0 1 0 0
0 0 0 0 0 1 0 0 0
Grafos dirigidos
Grafos dirigidos
Ciclo dirigido
Un ciclo dirigido es un camino simple de tama no al menos dos que conecte un v ertice con s mismo (un v ertice de un ciclo dirigido tiene g + (v ) > 0 y g (v ) > 0) v w v es un ciclo dirigido (pero no en el caso no dirigido) en muchas aplicaciones, no se quiere tener de esos ciclos: se dene un grafo dirigido aciclico (DAG) como un grafo dirigido sin ciclos dirigidos
Grafos dirigidos
Conectividad
v y w son fuertemente conectados (o mutuamente alcanzables) si existe un camino dirigido de v a w y otro de w a v : noci on mas fuerte que la alcanzabilidad Otra manera de decirlo: v y w est an ubicados sobre un camino c clico Por ejemplo, 5 y 0 est an fuertemente conectados (pero no est an un ciclo) el grafo es fuertemente conectado si todos sus pares de v ertices son fuertemente conectados El grafo no fuertemente conectado se puede particionar en un conjunto de subgrafos (componentes) fuertemente conectados y de arcos que conectan esos subgrafos
, J.B. Hayet Programacion, Febrero 2008 11 / 57
Grafos dirigidos
Terminolog a
8 1
fuente
0 6 7
ciclo dirigido
Grafos dirigidos
Conectividad
La conectividad fuerte dene una relaci on de equivalencia cuyas clase de equivalencia son las componentes fuertemente conectadas Un grafo-ciclo es compuesto de una sola componente fuertemente conectada Un DAG es formado por puros v ertices-componentes fuertemente conectadas (por qu e ?) Notar la diferencia con la conectividad en grafos no dirigidos: aqu hay arcos que no pertenecen a una componente fuertemente conectada
Grafos dirigidos
Conectividad
Propriedad: el grafo que se puede construir al usando cada componente fuertemente conectada por v ertice y cada arco que no entra en uno de los componentes es un DAG, y lo llamamos DAG n ucleo (kernel DAG ) Solo falta probar que no tiene ciclos: es obvio, ya que si dos componentes distintas est an en un ciclo entonces para cualquier par de dos v ertices en esas componentes podr amos encontrar un camino en ambos sentidos
Grafos dirigidos
DAG n ucleo
8
5 4 3
0 6 2 7
, J.B. Hayet Programacion, Febrero 2008 15 / 57
Grafos dirigidos
Conectividad
Distinguir: conectividad: grafos no dirigidos, cuesti on de saber si existe un camino simple entre dos nodos alcanzabilidad: grafos dirigidos, cuesti on de saber si a partir de un v ertice se puede alcanzar otro con un camino dirigido conectividad fuerte: grafos dirigidos, cuesti on de saber si dos v ertices pueden alcanzar uno al otro
Grafos dirigidos
Problemas t picos
existencia de ciclos orientados ordenamiento topol ogico: corresponde a encontrar una nueva manera de poner numeros a los v ertices de tal manera que si (v , w ) es una arco, v < w calculo de la cerradura transitiva (otro grafo donde todos los v ertices alcanzables uno desde el otro en el grafo original est an conectados) calculo de la conectividad fuerte y de sus componentes relacionadas: subgrafos m aximos donde cada v ertice puede alcanzar todos los otros
Grafos dirigidos
Podemos aplicar DFS tal cual, despu es de todo: la diferencia es que vamos a examinar los arcos salientes de cada nodo y que no necesariamente nos encontraremos al arco inverso Eso no hace el DFS mas estructuralmente facil Conservamos nodos internos en el arbol correspondiendo a las llamadas recursivas, y nodos externos que corresponden a:
v ertices ya visitados pozos
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57
Grafos dirigidos
2
1
5
3
Grafos dirigidos
Clasicaci on de las aristas del arbol en grafos no dirigidos: 4 clases (con dos criterios: tree edge o no, primera vez o no) Clasicaci on de las aristas del arbol en grafos dirigidos:
tree edge (llamada recursiva): 1-3 back edge (liga hacia un ancestro): 2-0 down edge (liga hacia un descendiente): 0-2 cross edge (liga hacia un vertice que no es ancestro o descendiente): si exitiera, 5-6
Grafos dirigidos
Una arista hacia un v ertice visitado es back ssi lleva a un postorden superior down ssi lleva a un postorden inferior y un preorden superior cross ssi lleva a un postorden inferior y un preorden inferior Por qu e no hay dual de los cross-edges?
, J.B. Hayet Programacion, Febrero 2008 22 / 57
Grafos dirigidos
Grafos dirigidos
Grafos dirigidos
Complejidad lineal, otra vez; en el peor caso O (|A| + |V |) o O (|V |2 ) Las propiedades de los diferentes arcos en el arbol no son tanto usqueda propiedades intr nsecas del grafo, sino de la b Buscar a partir de diferentes v ertices puede llevar resultados muy diferentes
Grafos dirigidos
Grafos dirigidos
0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 27 / 57
Grafos dirigidos
Grafos dirigidos
Aplicaciones: determinar en un programa que esta corriendo cuales son los apuntadores que se van a poder alcanzar o no. . . : Garbage Collector que libera los objetos que no se puede alcanzar determinar pedazos de c odigo muerto entre todos los archivos: que no van a estar usados en el programa
Grafos dirigidos
BFS y mas generalmente todos los recorridos lineales con cola generalizada funcionan igual que en el caso de grafos dirigidos exploran los mismos v ertices al empezar en uno en particular: los v ertices alcanzables por este toman tiempo lineal
Grafos dirigidos
Ejemplo: web crawlers con sitios web y hyperlinks partir de un sitio www poner los sitios ligados de este www en una cola generalizada poner los sitios visitados en un conjunto a parte DFS o BFS?
Cerradura transitiva
Outline
Cerradura transitiva
Cerradura transitiva
La cerradura transitiva de un grafo dirigido G es otro grafo dirigido con los mismos v ertices y donde v ertices v y w son conectados ssi existe en G un camino dirigido de v a w
8 1
0 6 7 2
Cerradura transitiva
Cerradura transitiva
Usando DFS, podemos soportar pedidas de cerradura transitiva en tiempo constante, espacio proporcional a |V 2 | y tiempo de preprocesamiento proporcional a |V |(|V | + |A|) Aplicar |V | veces, en cada v ertice, el DFS para establecer los v ertices alcanzables por cada v ertice
Cerradura transitiva
Cerradura transitiva
t e m p l a t e < c l a s s Graph > c l a s s t c { Graph T ; const Graph &G ; v o i d tcR ( i n t v , i n t w) { T . i n s e r t ( Edge ( v , w ) ) ; typename Graph : : a d j I t e r a t o r A(G , w ) ; f o r ( i n t t = A . beg ( ) ; ! A . end ( ) ; t = A . n x t ( ) ) i f ( ! T . edge ( v , t ) ) tcR ( v , t ) ; } public : t c ( const Graph &G) : G(G ) , T(G . V ( ) , t r u e ) { f o r ( i n t v = 0 ; v < G . V ( ) ; v++) tcR ( v , v ) ; } b o o l r e a c h a b l e ( i n t v , i n t w) { r e t u r n T . e dge ( v , w ) ; };
Cerradura transitiva
Cerradura transitiva
Una buena idea de la cerradura transitiva con la multiplicaci on l ogica de matrices de adyacencia:
f o r ( i n t i =0; i <V ; i ++) f o r ( i n t j =0; j <V ; j ++) { C[ i ] [ j ]=0; f o r ( i n t k =0;k<V ; k++) i f (A [ i ] [ k ] && B [ k ] [ j ] ) C [ i ] [ j ] = 1 ;
Si se pone 1 en las bucles, entonces A2 [i ][j ] indica nada mas la accesibilidad de j a partir de i en un camino de tama no 1 o 2
f o r ( i n t k =0;k<V ; k++) i f (A [ i ] [ k ] && A [ k ] [ j ] ) A2 [ i ] [ j ] = 1 ;
Cerradura transitiva
Cerradura transitiva
Consecuencia: se puede calcular la cerradura transitiva de cualquier grafo dirigido a partir de su matriz de adyacencia, a nadiendo las |V | bucles i i y calculando A Es la generalizaci on del principio de A2 : con A|V | examinaremos la alcanzabilidad con caminos de tama no inferior o igual a |V |. Los caminos de tama no superior no son interesantes: pasan necesariamente por dos veces el mismo v ertice, lo que induce un camino de tama no |V |
Cerradura transitiva
Cerradura transitiva
Complejidad: necesitamos |V | multiplicaciones de matrices |V | |V |. Cada multiplicaci on cuesta como |V |3 , lo que nos lleva a |V |4 . . . Ahora se puede mejorar un poco: nos podemos contentar de calcular p A2 , A4 , . . . A2 hasta que 2p > |V |. En este momento, tendremos p A2 = A|V | ya que no a nade ning un otro camino las multiplicaciones > |V |. En total, complejidad |V |3 log |V |
Cerradura transitiva
Cerradura transitiva
Hay mucho m as eciente: algoritmo de Warshall, en sitio sobre la matriz de adyacencia y en una sola fase
f o r ( i n t k =0;k<V ; k++) f o r ( i n t i =0; i <V ; i ++) f o r ( i n t j =0; j <V ; j ++) { i f (A [ i ] [ k ] && A [ k ] [ j ] ) A [ i ] [ j ] = 1 ;
Por qu e funciona? primera iteraci on: k = 0, despu es tenemos A[i ][j ] = 1 si estan conectados desde el principio o si pueden ser conectados por 0 (i-j o i-0-j) segunda iteraci on; k = 1, despu es tenemos A[i ][j ] = 1 si estan conectados desde el principio o si pueden ser conectados por 0 y 1 (i-j, i-0-j, i-1-j, i-0-1-j, i-1-0-j,i-0-1-0-j)
, J.B. Hayet Programacion, Febrero 2008 39 / 57
Cerradura transitiva
Cerradura transitiva
Por recursi on: en la iteraci on k , A[i ][j ] = 1 ssi existe un camino orientado entre i y j que no incluye los v ertices > k (excepto las extremidades) en k + 1, existe un camino orientado entre i y j que no incluye los v ertices > k + 1 ssi o existe un camino que no incluye v ertices > k (y entonces A[i ][j ] = 1 por la hip otesis de recursion) o existe un camino que va de i a k + 1 (y no tiene v ertices > k ) y otro de k + 1 a j (igual) entonces el ciclo k + 1 lo habr a activado 3 2 en O (|V | ) en tiempo, en O (|V | ) en espacio se puede mejorar un poquit n, como?
Cerradura transitiva
Cerradura transitiva
t e m p l a t e < c l a s s tcGraph , c l a s s Graph > c l a s s TC { tcGraph T; public : TC( const Graph &G) : T(G) { f o r ( i n t s = 0 ; s < T . V ( ) ; s++) T . i n s e r t ( Edge ( s , s ) ) ; f o r ( i n t i = 0 ; i < T . V ( ) ; i ++) f o r ( i n t s = 0 ; s < T . V ( ) ; s++) i f (T . edge ( s , i ) ) f o r ( i n t t = 0 ; t < T . V ( ) ; t++) i f (T . e dge ( i , t ) ) T . i n s e r t ( Edge ( s , t ) ) ; } b o o l r e a c h a b l e ( i n t s , i n t t ) const { r e t u r n T . edge ( s , t ) ; } };
J.B. Hayet Programacion, Febrero 2008 41 / 57
Cerradura transitiva
Cerradura transitiva
Aplicaci on 1: calculo de los caminos mas cortos para todo par de v ertices; necesita un peque na modicaci on de Warshall:
f o r ( i n t k =0;k<V ; k++) f o r ( i n t i =0; i <V ; i ++) f o r ( i n t j =0; j <V ; j ++) { i f (A [ i ] [ k ] + A [ k ] [ j ] <A [ i ] [ j ] ) A [ i ] [ j ]=A [ i ] [ k ] + A [ k ] [ j ] ;
Cerradura transitiva
Cerradura transitiva
Aplicaci on 1: tomar por ejemplo A[i ][j ] = V si no est an conectados directamente, A[i ][j ] = 1 si lo est an, as seleccionar a el camino mas corto cada vez entre los que incluyen 0, 1, 2, . . . k Estamos en un caso particular del algoritmo de Floyd (que es denido para grafos ponderados)
Cerradura transitiva
Cerradura transitiva
Aplicaci on 2: multiplicaci on l ogica de matrices A y B . Formar: I A 0 C = 0 I B 0 0 I I A AB y remarcar que la cerradura transitiva C 2 = 0 I B 0 0 I Deduces que puedes calcular el producto logico de dos matrices con cualquier algoritmo de cerradura transitiva. Por el momento, en un tiempo proporcional a |V |3 (pero tal vez se puede mejor ?)
Outline
Inter es
Gran inter es en muchas areas en particular para representar dependencias, causalidades, precedencias:
13 8 5 3 2 1 1 1 2 1 2 1 3 1 1 2 1 3 1 1 1 1 5 2 1
13 8 5 3 2 1
Calculos de scheduling con restricciones de precedencia. . . Vericar que es DAG es f acil (DFS)
, J.B. Hayet Programacion, Febrero 2008 46 / 57
Ordenamiento topologico
Forma mas b asica del scheduling: encontrar una transformaci on en el grafo de tal manera que nos de un orden de procesamiento de los v ertices donde cada v ertice esta procesado antes de los v ertices que pueda alcanzar tiene sentido solo para DAG, por qu e? aplicaciones: robotica, clases que seguir. . .
Ordenamiento topologico
Dos maneras de verlo: 1 Relabelling: cambias la manera de numerar a los v ertices de tal manera que los arcos apuntan solo entre indices crecientes; es un mapeo mL sobre [0, V 1], mL(v ) representando los nuevos indices 2 Rearrangement: mueves tus v ertices de tal manera a ponerles en una linea horizontal, y tal que todas los arcos apunten de izquierda a la derecha, es otro mapeo mR que asigna un orden Los dos son inversos: con un rearrangement deduces un relabeling y vice-versa: mL(mR (i )) = i . No hay unicidad!
Ordenamiento topologico
5 3 2 4 mR 53421 5 3
J.B. Hayet
1 mL 54231
1
, Programacion, Febrero 2008 50 / 57
Ordenamiento topologico
El mR es el que buscamos, es un orden de visita de los v ertices. Propriedad: el reverso del orden postorden de los v ertices en el grafo nos da inmediatamente un mR posible para solucionar nuestro problema. Prueba: si v y w aparecen en este orden en la lista post-orden entonces no puede haber v w , y solo puede haber w v . En efecto, si hab a v w , (1) no hubiera podido ser un back (no hay ciclos) y (2) si es down, tree o cross, w hubiera sido terminado de examinar antes de v (contradicci on)
Ordenamiento topologico
El reverso:
t e m p l a t e < c l a s s Dag> c l a s s dagTS { const Dag &D; i n t cnt , t c n t ; v e c t o r <i n t > pre , p o s t , p o s t I ; void tsR ( i n t v ) { p r e [ v ] = c n t ++; typename Dag : : a d j I t e r a t o r A(D, v ) ; f o r ( i n t t = A . beg ( ) ; ! A . end ( ) ; t = A . n x t ( ) ) i f ( p r e [ t ] == 1) t s R ( t ) ; p o s t [ v ] = t c n t ; p o s t I [ t c n t ++] = v ; }
Ordenamiento topologico
El reverso:
public : dagTS ( const Dag &D) : D(D) , t c n t ( 0 ) , c n t ( 0 ) , p r e (D. V ( ) , 1) , p o s t (D . V ( ) , 1) , p o s t I (D . V ( ) , 1) { f o r ( i n t v = 0 ; v < D . V ( ) ; v++) i f ( p r e [ v ] == 1) t s R ( v ) ; } i n t o p e r a t o r [ ] ( i n t v ) const { r e t u r n p o s t I [ v ] ; } i n t r e l a b e l ( i n t v ) const { r e t u r n p o s t [ v ] ; }
Ordenamiento topologico
Ordenamiento topologico
5 3 2 4 1
3
J.B. Hayet
1
, Programacion, Febrero 2008 55 / 57