Está en la página 1de 67

PAII-7: Grafos dirigidos

Dr. J.B. Hayet


CENTRO DE INVESTIGACION EN MATEMATICAS

Febrero 2008

, J.B. Hayet Programacion, Febrero 2008 1 / 57

Outline

Grafos dirigidos Cerradura transitiva Grafos dirigidos ac clicos

, J.B. Hayet Programacion, Febrero 2008 2 / 57

Grafos dirigidos

Outline

Grafos dirigidos Cerradura transitiva Grafos dirigidos ac clicos

, J.B. Hayet Programacion, Febrero 2008 3 / 57

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

, J.B. Hayet Programacion, Febrero 2008 5 / 57

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

, J.B. Hayet Programacion, Febrero 2008 6 / 57

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)

, J.B. Hayet Programacion, Febrero 2008 7 / 57

Grafos dirigidos

Grafos dirigidos: representaci on


Con matriz de adyacencia:
8 1

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

Ya no tenemos simetr a. . . Y AT corresponde al grafo inverso

, J.B. Hayet Programacion, Febrero 2008 8 / 57

Grafos dirigidos

Grafos dirigidos: representaci on


Con lista de adyacencia: Una opci on es representar cada arco una y una sola vez en la lista de adyacencia del v ertice incidente (igual que para grafos no dirigidos, pero con la mitad de arcos) Ahora en muchos algoritmos se puede necesitar saber no solo si hay arcos saliendo de un v ertice sino tambi en si hay arcos entrantes:
usar dos grafos, el grafo y su inverso usar dos listas en cada v ertice: los entrantes y los salientes usar la misma representaci on que los grafos no dirigidos pero con un bit de direcci on

, J.B. Hayet Programacion, Febrero 2008 9 / 57

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

, J.B. Hayet Programacion, Febrero 2008 10 / 57

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

pozo componente fuertemente conectada (0-1-5-3-2)


4

fuente

0 6 7

ciclo dirigido

, J.B. Hayet Programacion, Febrero 2008 12 / 57

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

, J.B. Hayet Programacion, Febrero 2008 13 / 57

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

, J.B. Hayet Programacion, Febrero 2008 14 / 57

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

, J.B. Hayet Programacion, Febrero 2008 16 / 57

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

, J.B. Hayet Programacion, Febrero 2008 17 / 57

Grafos dirigidos

DFS, otra vez

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

, J.B. Hayet Programacion, Febrero 2008 18 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 19 / 57

Grafos dirigidos

DFS en grafos dirigidos


El arbol DFS correspondiente:
0

2
1

5
3

, J.B. Hayet Programacion, Febrero 2008 20 / 57

Grafos dirigidos

DFS en 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

Por qu e no hay cross-edges en grafos no dirigidos?

, J.B. Hayet Programacion, Febrero 2008 21 / 57

Grafos dirigidos

DFS en grafos dirigidos


Una caracterizaci on eciente: usar ordenes preorden Y postorden! Comparar los v ertices del arco: pre < > > post > < > ejemplo tipo 0-2 down 2-0 back 5-6 cross

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

DFS en grafos dirigidos


t e m p l a t e < c l a s s Graph > c l a s s DFS { const Graph &G ; i n t depth , cnt , cntP ; v e c t o r <i n t > pre , p o s t ; v o i d show ( char s , Edge e ) { f o r ( i n t i = 0 ; i < d e p t h ; i ++) c o u t << ; c o u t << e . v << << e . w << s << e n d l ; } v o i d d f s R ( Edge e ) { i n t w = e . w ; show ( t r e e , e ) ; p r e [ w ] = c n t ++; d e p t h++; 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 ( ) ) { Edge x (w , t ) ; i f ( p r e [ t ] == 1) d f s R ( x ) ;
, J.B. Hayet Programacion, Febrero 2008 23 / 57

Grafos dirigidos

DFS en grafos dirigidos


e l s e i f ( p o s t [ t ] == 1) show ( back , x ) ; e l s e i f ( p r e [ t ] > p r e [ w ] ) show ( down , x ) ; else show ( c r o s s , x ) ; } p o s t [ w ] = cntP++; depth ; } public : DFS( const Graph &G) : G(G ) , c n t ( 0 ) , cntP ( 0 ) , p r e (G . V ( ) , 1) , p o s t (G . V ( ) , 1) { f o r ( i n t v = 0 ; v < G . V ( ) ; v++) i f ( p r e [ v ] == 1) d f s R ( Edge ( v , v ) ) ; } };

, J.B. Hayet Programacion, Febrero 2008 24 / 57

Grafos dirigidos

DFS en 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

, J.B. Hayet Programacion, Febrero 2008 25 / 57

Grafos dirigidos

DFS en grafos dirigidos


Detecci on de ciclos: un grafo es un DAG ssi el DFS aplicado a este grafo no conduce a ning un back edge al examinar todos los arcos. (1) (2) si hay un back edge construimos con ese un ciclo dirigido con la sucesi on de tree edges (2) (1) suponemos que no es un DAG y que hay un ciclo. DFS va a visitar un primero v ertice del ciclo, v . Los v ertices siguientes tendr an un orden preorden mas alto; el precedente en el ciclo apuntara hacia el: eso ser a un back edge

, J.B. Hayet Programacion, Febrero 2008 26 / 57

Grafos dirigidos

DFS en grafos dirigidos


Una consecuencia: todo grafo puede estar transformado en DAG: aplicar una DFS y quitar los arcos de tipo back
8 1

0 6 7 2
, J.B. Hayet Programacion, Febrero 2008 27 / 57

Grafos dirigidos

DFS en grafos dirigidos


Diferencia con grafos no dirigidos: la implementaci on es un poco diferente porque no tenemos que descartar esta vez las aristas de tipo hijo-padre: esta vez son aristas de tipo back como las otras Entender que DFS, en grafos dirigidos, nos da informaci on de alcanzabilidad fuertemente ligada al vertice de inicio; en grafos no dirigidos, deduc amos informaci on de conectividad global Perdimos informaci on global al olvidar los cross, back, down Para obtener toda la informaci on de alcanzabilidad, a priori podr amos hacer una sucesi on de DFS sobre cada v ertice; pero se puede hacer mejor

, J.B. Hayet Programacion, Febrero 2008 28 / 57

Grafos dirigidos

DFS en 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

, J.B. Hayet Programacion, Febrero 2008 29 / 57

Grafos dirigidos

BFS en 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

, J.B. Hayet Programacion, Febrero 2008 30 / 57

Grafos dirigidos

BFS en 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?

, J.B. Hayet Programacion, Febrero 2008 31 / 57

Cerradura transitiva

Outline

Grafos dirigidos Cerradura transitiva Grafos dirigidos ac clicos

, J.B. Hayet Programacion, Febrero 2008 32 / 57

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

, J.B. Hayet Programacion, Febrero 2008 33 / 57

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

, J.B. Hayet Programacion, Febrero 2008 34 / 57

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

, J.B. Hayet Programacion, Febrero 2008 35 / 57

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 ;

, J.B. Hayet Programacion, Febrero 2008 36 / 57

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 |

, J.B. Hayet Programacion, Febrero 2008 37 / 57

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 |

, J.B. Hayet Programacion, Febrero 2008 38 / 57

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?

, J.B. Hayet Programacion, Febrero 2008 40 / 57

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 ] ;

Como inicializarlo para que funcione?

, J.B. Hayet Programacion, Febrero 2008 42 / 57

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)

, J.B. Hayet Programacion, Febrero 2008 43 / 57

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

, J.B. Hayet Programacion, Febrero 2008 44 / 57

Grafos dirigidos ac clicos

Outline

Grafos dirigidos Cerradura transitiva Grafos dirigidos ac clicos

, J.B. Hayet Programacion, Febrero 2008 45 / 57

Grafos dirigidos ac clicos

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

Grafos dirigidos ac clicos

Grafos dirigidos ac clicos


Hay similaridad muy grande con arboles: son como arboles donde los nodos presentes varias veces han sido hundidos en un solo v ertice (la u nica diferencia es que Notar que un recorrido sobre un arbol (sin checar si los nodos ya han sido visitados) (1) funciona sobre el DAG (porque no hay ciclos) y (2) recorre exactamente como si el DAG hab a sido transformado otra vez en arbol (v ertices dedoblados) de la misma manera que Arboles Binarios se puede denir DAG binario como un DAG cuyos v ertices tienen al m aximo dos arcos salientes: sirven de representaci on alternativa para arboles binarios (cual es la ventaja ?)

, J.B. Hayet Programacion, Febrero 2008 47 / 57

Grafos dirigidos ac clicos

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

, J.B. Hayet Programacion, Febrero 2008 48 / 57

Grafos dirigidos ac clicos

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!

, J.B. Hayet Programacion, Febrero 2008 49 / 57

Grafos dirigidos ac clicos

Ordenamiento topologico
5 3 2 4 mR 53421 5 3
J.B. Hayet

1 mL 54231

1
, Programacion, Febrero 2008 50 / 57

Grafos dirigidos ac clicos

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)

, J.B. Hayet Programacion, Febrero 2008 51 / 57

Grafos dirigidos ac clicos

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 ; }

, J.B. Hayet Programacion, Febrero 2008 52 / 57

Grafos dirigidos ac clicos

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 ] ; }

, J.B. Hayet Programacion, Febrero 2008 53 / 57

Grafos dirigidos ac clicos

Ordenamiento topologico

Para el orden correcto, usar los :


void tsR ( i n t v ) { p r e [ v ] = c n t ++; f o r ( i n t w = 0 ; w < D . V ( ) ; w++) i f (D . edge (w , v ) ) i f ( p r e [ w ] == 1) t s R (w ) ; p o s t [ v ] = t c n t ; p o s t I [ t c n t ++] = v ; }

, J.B. Hayet Programacion, Febrero 2008 54 / 57

Grafos dirigidos ac clicos

Ordenamiento topologico
5 3 2 4 1

Post-orden con arcos entrantes: 5-3-4-2-1

3
J.B. Hayet

1
, Programacion, Febrero 2008 55 / 57

Grafos dirigidos ac clicos

Ordenamiento topologico, otro m etodo


Propriedad: un DAG tiene al menos un pozo y al menos una fuente. Tiene al menos un pozo: sino se puede f acilmente construir un ciclo. Y si tiene un pozo, su reverso (un DAG tambi en) tambi en, entonces tiene una fuente. Luego remarcar que puedes poner en tu orden cualquiera de las fuentes existentes: mantener una cola de fuentes y mientras no esta vac a: quitar una fuente y marcarla actualizar grados entrantes si hay grados entrante nulo, poner el v ertice en la cola

, J.B. Hayet Programacion, Febrero 2008 56 / 57

También podría gustarte