Vous êtes sur la page 1sur 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, planicacin de tareas, cadena alimentar, o calicacin de sitios www, cadenas de dependencia. . . o
, 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 direccin o de todos los arcos

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

Grafos dirigidos

Grafos dirigidos
Un camino dirigido es una lista de vrtices en la que hay un arco e conectando cada vrtice a su sucesor en la lista e Un vrtice w es alcanzable desde otro vrtice v si existe un e e camino dirigido desde v hasta w La conectividad de esos grafos no se ve tan fcilmente que en el a caso no dirigido; adems, su estudio implica ms cosas que ver: a a 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 vrtice v , es el numero de arcos e que llevan a este vrtice e Grado saliente g (v ): para un vrtice, es el numero de arcos que e salen de este vrtice e Una fuente es un vrtice v tal que g + (v ) = 0 (no se puede e alcanzar desde cualquier otro vrtice) e Un pozo es un vrtice v tal que g (v ) = 0 (no se puede e alcanzar ningn vrtice desde este) u e

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

Grafos dirigidos

Grafos dirigidos: representacin o


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 . . Y AT corresponde al grafo inverso a.

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

Grafos dirigidos

Grafos dirigidos: representacin o


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

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

Grafos dirigidos

Ciclo dirigido

Un ciclo dirigido es un camino simple de tamao al menos dos n que conecte un vrtice con s mismo (un vrtice de un ciclo e e 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 : nocin o mas fuerte que la alcanzabilidad Otra manera de decirlo: v y w estn ubicados sobre un camino a c clico Por ejemplo, 5 y 0 estn fuertemente conectados (pero no estn a a un ciclo) el grafo es fuertemente conectado si todos sus pares de vrtices e 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 relacin de equivalencia cuyas o 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 vrtices-componentes e 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 vrtice y cada arco que no e entra en uno de los componentes es un DAG, y lo llamamos DAG ncleo (kernel DAG ) u Solo falta probar que no tiene ciclos: es obvio, ya que si dos componentes distintas estn en un ciclo entonces para cualquier par a de dos vrtices en esas componentes podr e amos encontrar un camino en ambos sentidos

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

Grafos dirigidos

DAG ncleo u
8

5 4 3

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

Grafos dirigidos

Conectividad

Distinguir: conectividad: grafos no dirigidos, cuestin de saber si existe un o camino simple entre dos nodos alcanzabilidad: grafos dirigidos, cuestin de saber si a partir de o un vrtice se puede alcanzar otro con un camino dirigido e conectividad fuerte: grafos dirigidos, cuestin de saber si dos o vrtices pueden alcanzar uno al otro e

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

Grafos dirigidos

Problemas t picos
existencia de ciclos orientados ordenamiento topolgico: corresponde a encontrar una nueva o manera de poner numeros a los vrtices de tal manera que si e (v , w ) es una arco, v < w calculo de la cerradura transitiva (otro grafo donde todos los vrtices alcanzables uno desde el otro en el grafo original estn e a conectados) calculo de la conectividad fuerte y de sus componentes relacionadas: subgrafos mximos donde cada vrtice puede a e alcanzar todos los otros

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

Grafos dirigidos

DFS, otra vez

Podemos aplicar DFS tal cual, despus de todo: la diferencia es e 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 rbol correspondiendo a las a llamadas recursivas, y nodos externos que corresponden a:
vrtices ya visitados e 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 rbol DFS correspondiente: a
0

2
1

5
3

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

Grafos dirigidos

DFS en grafos dirigidos

Clasicacin de las aristas del rbol en grafos no dirigidos: 4 o a clases (con dos criterios: tree edge o no, primera vez o no) Clasicacin de las aristas del rbol en grafos dirigidos: o a
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 no hay cross-edges en grafos no dirigidos? e

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

Grafos dirigidos

DFS en grafos dirigidos


Una caracterizacin eciente: usar ordenes preorden Y postorden! o Comparar los vrtices del arco: e pre < > > post > < > ejemplo tipo 0-2 down 2-0 back 5-6 cross

Una arista hacia un vrtice visitado es e 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 no hay dual de los cross-edges? e
, 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 rbol no son tanto a u propiedades intr nsecas del grafo, sino de la bsqueda Buscar a partir de diferentes vrtices puede llevar resultados muy e diferentes

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

Grafos dirigidos

DFS en grafos dirigidos


Deteccin de ciclos: un grafo es un DAG ssi el DFS aplicado a este o grafo no conduce a ningn back edge al examinar todos los arcos. u (1) (2) si hay un back edge construimos con ese un ciclo dirigido con la sucesin de tree edges o (2) (1) suponemos que no es un DAG y que hay un ciclo. DFS va a visitar un primero vrtice del ciclo, v . e Los vrtices siguientes tendrn un orden preorden mas e a 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 implementacin es un poco o 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 informacin de o alcanzabilidad fuertemente ligada al vertice de inicio; en grafos no dirigidos, deduc amos informacin de conectividad global o Perdimos informacin global al olvidar los cross, back, down o Para obtener toda la informacin de alcanzabilidad, a priori o podr amos hacer una sucesin de DFS sobre cada vrtice; pero o e 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 cdigo muerto entre todos los archivos: o 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 vrtices al empezar en uno en particular: los e vrtices alcanzables por ste e e 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 vrtices y donde vrtices v y w son conectados ssi e e 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 vrtice, el DFS para establecer los vrtices e e alcanzables por cada vrtice e

, 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 multiplicacin o lgica de matrices de adyacencia: o
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 tamao 1 o 2 n
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, aadiendo las n |V | bucles i i y calculando A Es la generalizacin del principio de A2 : con A|V | examinaremos la o alcanzabilidad con caminos de tamao inferior o igual a |V |. Los n caminos de tamao superior no son interesantes: pasan n necesariamente por dos veces el mismo vrtice, lo que induce un e camino de tamao |V | n

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

Cerradura transitiva

Cerradura transitiva

Complejidad: necesitamos |V | multiplicaciones de matrices |V | |V |. Cada multiplicacin cuesta como |V |3 , lo que nos lleva a |V |4 . . . o 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 aade ningn otro camino las multiplicaciones n u > |V |. En total, complejidad |V |3 log |V |

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

Cerradura transitiva

Cerradura transitiva
Hay mucho ms eciente: algoritmo de Warshall, en sitio sobre la a 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 funciona? e primera iteracin: k = 0, despus tenemos A[i][j] = 1 si estan o e conectados desde el principio o si pueden ser conectados por 0 (i-j o i-0-j) segunda iteracin; k = 1, despus tenemos A[i][j] = 1 si estan o e 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 recursin: en la iteracin k, A[i][j] = 1 ssi existe un camino o o orientado entre i y j que no incluye los vrtices > k (excepto las e extremidades) en k + 1, existe un camino orientado entre i y j que no incluye los vrtices > k + 1 ssi o existe un camino que no incluye vrtices e e > k (y entonces A[i][j] = 1 por la hiptesis de recursion) o o existe un camino que va de i a k + 1 (y no tiene vrtices > k) y e otro de k + 1 a j (igual) entonces el ciclo k + 1 lo habr activado a 3 2 en O(|V | ) en tiempo, en O(|V | ) en espacio se puede mejorar un poquit como? n,

, 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

Aplicacin 1: calculo de los caminos mas cortos para todo par de o vrtices; necesita un pequea modicacin de Warshall: e n o
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

Aplicacin 1: tomar por ejemplo A[i][j] = V si no estn conectados o a directamente, A[i][j] = 1 si lo estn, as seleccionar el camino mas a a 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
Aplicacin 2: multiplicacin lgica de matrices A y B. Formar: o o o 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

Inters e
Gran inters en muchas reas en particular para representar e a 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 fcil (DFS) a
, 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 vrtice (la unica diferencia es que e Notar que un recorrido sobre un rbol (sin checar si los nodos ya a han sido visitados) (1) funciona sobre el DAG (porque no hay ciclos) y (2) recorre exactamente como si el DAG hab sido a transformado otra vez en arbol (vrtices dedoblados) e de la misma manera que Arboles Binarios se puede denir DAG binario como un DAG cuyos vrtices tienen al mximo dos arcos e a salientes: sirven de representacin alternativa para arboles o binarios (cual es la ventaja ?)

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

Grafos dirigidos ac clicos

Ordenamiento topologico

Forma mas bsica del scheduling: a encontrar una transformacin en el grafo de tal manera que nos o de un orden de procesamiento de los vrtices donde cada vrtice e e esta procesado antes de los vrtices que pueda alcanzar e 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 vrtices de tal e 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 vrtices de tal manera a ponerles en e 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 vrtices. e Propriedad: el reverso del orden postorden de los vrtices en el grafo e 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 v w , (1) no hubiera podido ser un back (no hay a ciclos) y (2) si es down, tree o cross, w hubiera sido terminado de examinar antes de v (contradiccin) o

, 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 mtodo e


Propriedad: un DAG tiene al menos un pozo y al menos una fuente. Tiene al menos un pozo: sino se puede fcilmente construir un ciclo. a Y si tiene un pozo, su reverso (un DAG tambin) tambin, entonces e e 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 vrtice en la cola e

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