Вы находитесь на странице: 1из 52

Ordenamiento topolgico

Christian von Lcken


clucken@pol.una.py

Original by Douglas Wilhelm Harder


Translated by Christian von Lcken

Ordenamiento topolgico
Topological Sort
En este tpico, discutiremos:
la idea de ordenar elementos en un DAG
un ejemplo de ordenamiento topolgico
la implementacin utilizando una tabal
de grados de entrada

Directed acyclic graph


(DAG)
Un grafo directo sin ciclos
Bueno para modelar procesos y
estructuras que tienen un orden parcial:
a > b y b > c a > c.
Pero puede suceder que existan a y b
tales que ni a > b ni b > c.
Puede construirse un orden total (ya sea
a > b o b > a para todo a = b) desde un
orden parcial. Esto es lo que hace el
ordenamiento topolgico.

Teorema
En el DFS de un grafo no dirigido,
tenemos solo arcos tree y back. No
existen arcos forward o cross edges.

Lemma
Un grafo dirigido G es aciclico si y
solo si un DFS de G no produce back
edges.
Prueba : Si existe un back edge
Suponga
existe un
hay unque
ciclo.
back edge (u, v). Entonces
v es ancestro de u en un
depht-first forest.
Entonces existe un camino
v ~> u, y entonces v ~> u

Lemma
Un grafo dirigido G es aciclico si y solo si un
DFS de G no produce back edges.
: Si existe un back edge hay un ciclo.
: Si existe un ciclo back edge.
Si G contiene un ciclo c. Sea v el primer
vrtice descubierto en c, y sea (u, v) un arco
predecesor en c. En el tiempo d[v], los
vertices de c forman un camino blanco de v
a u. Por el teorema del camino blanco u es
un descendiente de v en el bosque depthfirst. Por tanto, (u, v) es un back edge.

Topological sort
Un ordenamiento topolgico de un DAG G = (V, E)
es un ordenamiento lineal de todos sus vrtices
tal que si G contiene un arco (u, v), entonces u
aparece antes de v en el ordenamiento (Si el
grafo no es acclico, entonces no es posible un
ordenamiento lineal)
Un ordenamiento topolgico de un grafo puede
verse como un ordenamiento de sus vrtices a lo
largo de una linea horizontal tal que todos los
arcos directos van desde la izquierda a la
derecha.

Algoritmo

Ordenamiento topolgico
Dados dos vrtices vi y vj en un DAG, como
mucho puede existir solo:
un camino de vi a vj, o
un camino de vj a vi

Entonces, debe ser posible listar todos los


vrtices tal que en esa lista, vi precede a vj si
existe un camino entre vi a vj
Si esto no es posible, esto podra implicar la
existencia de un ciclo

Ordenamiento topolgico
Este ordenamiento se llama ordenamiento
topolgico
Por ejemplo, en este DAG, un
ordenamiento topolgico es 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13

Ordenamiento topolgico
Un ordenamiento topolgico puede no ser
nico
Por ejemplo, los siguientes ordenamientos
1, 3, 2, 7, 6, 5, 4, 10, 9, 8, 12, 11, 13
1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12, 13

Aplicacin
Dado un nmero de tareas, usualmente
existen un nmero de restricciones entre las
tareas:
la tarea A debe completarse antes de que la
tarea B pueda empezar

Estas tareas y restricciones se pueden


representar usando un DAG
Un ordenamiento topolgico del grafo
proporciona un orden en el cual se pueden
ejecutar las tareas satisfaciendo las
restricciones

Aplicaciones
Secuencia
de cursos en un DAG

Aplicaciones
Un DAG representando
una serie de tares
La numeracin indica
el orden topolgico
de la tarea
Las flechas verdes
representan
restricciones de
precedencia
Ref: The Standard Task Graph
http://www.kasahara.elec.waseda.ac.jp/schedule/

Application
Otro orden topolgico
de un DAG
El camino critico en
rojo es la secuencia
de tareas que toman ms
tiempo

Ref: The Standard Task Graph


http://www.kasahara.elec.waseda.ac.jp/schedule/

Aplicaciones
Este ltimo DAG puede ser utilizado para
realizar estas tareas en m procesadores
En este caso, el ordenamiento topolgico
toma otras consideraciones,
especficamente, minimizar el tiempo total
de ejecutar un conjunto de tareas
Veremos un planificador simple cuando se
vean algoritmos greedy

Ordenamiento topolgico
Para generar un ordenamiento topolgico
debemos empezar con un vrtice que
tenga un grado de entrada 0: 1

Ordenamiento topolgico
En este punto, podemos ignorar estos
arcos que conectan 1 con otros vrtices y
podemos elegir el vrtice 2:
1, 2

Ordenamiento topolgico
Elegimos entre 4, 5, o 3:
1, 2, 4

Ordenamiento topolgico
Agregamos los vrtices que llegan a 4 a
los que ignoramos, podemos agreagar el
8
1, 2, 4, 8

Ordenamiento topolgico
En este punto no se puede agregar 11,
pues sigue a 9 en el ordenamiento
topolgico. Debemos elegir entre 5 o 3:
1, 2, 4, 8, 5

Ordenamiento topolgico
Eliminando el 5 de consideracin
podemos ahora elegir los vrtices 3 o 9
Pero 3 debe preceder a 10:
1, 2, 4, 8, 5, 9

Ordenamiento topolgico
Podemos agregar 11 a nuestro
ordenamiento topolgico
1, 2, 4, 8, 5, 9, 11

Ordenamiento topolgico
El nico vrtice que tiene un grado de
entrada con 0 es 3
1, 2, 4, 8, 5, 9, 11, 3

Ordenamiento topolgico
Agregando 3,se puede elegir entre 6 o 7
1, 2, 4, 8, 5, 9, 11, 3, 6

Ordenamiento topolgico
Agregando 6 podemos elegir entre los
vrtices 7 o 10
1, 2, 4, 8, 5, 9, 11, 3, 6, 10

Ordenamiento topolgico
Como 7 debe preceder 12 en el
ordenamiento topolgico, debemos
agregar 7 al ordenamiento
1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7

Ordenamiento topolgico
En este punto se agrega 12

1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12

Ordenamiento topolgico
Finalmente el vrtice 13

1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12, 13

Ordenamiento topolgico
En este punto no quedan vrtices, y se ha
completado el ordenamiento topolgico en
este grafo
1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12, 13

Ordenamiento topolgico
Es obvio que el ordenamiento topolgico
no es nico
En cualquier punto donde existe una
eleccin sobre cual vrtice seguir
tenemos posibilidades de formar un orden
topolgico diferente

Ordenamiento topolgico
Por ejemplo, en esta etapa, podramos
elegir 7 en vez de 6:
1, 2, 4, 8, 5, 9, 11, 3, 7

Ordenamiento topolgico
El orden topolgico resultante podra ser
entonces
1, 2, 4, 8, 5, 9, 11, 3, 7, 6, 10, 12, 13

Ordenamiento topolgico
Dos ordenamientos distintos son:
1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12, 13
1, 2, 4, 8, 5, 9, 11, 3, 7, 6, 10, 12, 13
Pero no son los nicos posibles:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
es igualmente aceptable

Implementacin
Qu se necesita para construir
un ordenamiento topolgico?
Suponga que tenemos un array
con los grados de entrada de
cada vrtice

10

11

12

13

Implementacin
Recorrido en amplitud
Creamos un contenedor (stack
o cola) que contiene todos los
vrtices con grado de entrada 0

10

11

12

13

Implementacin
Usamos una cola
La cola inicialmente contiene
solo el vrtice 1
Podemos sacar 1 de la cola y
agregar a nuestro
ordenamiento topolgico:
1

10

11

12

13

Implementacin
Ahora con el recorrido en
amplitud encolamos todos los
vrtices hijo
En este caso, decrementamos
el grado de entrada de todos
los vrtices adyacentes al
vrtice desencolado

10

11

12

13

Implementacin
Cada vez que decrementamos
el grado de entrada de un
vertice verificamos si es cero
Si es cero encolamos el nodo
Ahora nuestra cola contiene 2 y
3

10

11

12

13

Implementacin
Desencolamos 2, lo agregamos al
ordenamiento topolgico
1, 2
y decrementamos los grados de
entrada de los vrtices 4 y 5
Tanto 4 y 5 se reducen a cero,
nuestra cola es:
3, 4, 5

10

11

12

13

Ejemplo
Considere el DAG con seis vrtices

Ejemplo
Creamos la tabla con los grados de
entrada
1

Ejemplo
Cremos una cola donde agregamos 1 y 6

Queue

Ejemplo
Desencolamos (1), decrementamos el
grado de entrada de toos los vrtices y
desencolamos 2

Queue

Sort
1

Ejemplo
Desencolamos 6 y decrementamos los
grados de entrada de los adyacentes

Queue

Sort
1, 6

Ejemplo
Desencolamos 2, decrementamos, y
encolamos 5

Queue

Sort
1, 6, 2

Ejemplo
Desencolamos 5, decrementamos, y
encolamos el vrtice 3

Queue

Sort
1, 6, 2, 5

Ejemplo
Desencolamos 3, decrementamos 4, y
agreagamos 4 al la cola

Queue

Sort
1, 6, 2, 5, 3

Ejemplo
Desencolamos 4, no existen vrtices
adyacentes para decrementar

Queue

Sort
1, 6, 2, 5, 3, 4

Ejemplo
La cola esta vaca, el ordenamiento
tpolgico es1, 6, 2, 5, 3, 4

Referencias
[1] Cormen, Leiserson, and Rivest, Introduction to
Algorithms, McGraw Hill, 1990, 11.1, p.200.
[1] Cormen, Leiserson, and Rivest, Stein Introduction to
Algorithms, McGraw Hill, 2001, 22.
[2] Weiss, Data Structures and Algorithm Analysis in C++,
3rd Ed., Addison Wesley, 9.2, p.342-5.

Вам также может понравиться