550 likes | 837 Views
Ordenamiento topológico. Christian von Lücken clucken@pol.una.py Original by Douglas Wilhelm Harder Translated by Christian von Lücken. Ordenamiento topológico Topological Sort. En este tópico, discutiremos: la idea de ordenar elementos en un DAG un ejemplo de ordenamiento topológico
E N D
Ordenamiento topológico Christian von Lücken clucken@pol.una.py Original by Douglas Wilhelm Harder Translated by Christian von Lücken
Ordenamiento topológicoTopological Sort • En este tópico, discutiremos: • la idea de ordenar elementos en un DAG • un ejemplo de ordenamiento topológico • la implementación 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 topológico.
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 ⇒ hay un ciclo. • Suponga que existe un back edge(u, v). Entonces v es ancestro de u en un depht-firstforest. • Entonces existe un camino v ~> u, y entonces v ~> u → v es un ciclo.
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 vértice 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 depth-first. Por tanto, (u, v) es un back edge.
Topological sort • Un ordenamiento topológico de un DAG G = (V, E) es un ordenamiento lineal de todos sus vértices tal que si G contiene un arco (u, v), entonces u aparece antes de v en el ordenamiento (Si el grafo no es acíclico, entonces no es posible un ordenamiento lineal) • Un ordenamiento topológico de un grafo puede verse como un ordenamiento de sus vértices a lo largo de una linea horizontal tal que todos los arcos directos van desde la izquierda a la derecha.
Ordenamiento topológico • Dados dos vértices 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 vértices tal que en esa lista, vi precede a vj si existe un camino entre vi a vj • Si esto no es posible, esto podría implicar la existencia de un ciclo
Ordenamiento topológico • Este ordenamiento se llama ordenamiento topológico • Por ejemplo, en este DAG, un ordenamiento topológico es 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
Ordenamiento topológico • Un ordenamiento topológico 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
Aplicación • Dado un número de tareas, usualmente existen un número 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 topológico del grafo proporciona un orden en el cual se pueden ejecutar las tareas satisfaciendo las restricciones
Aplicaciones • Secuenciade cursos en un DAG
Aplicaciones • Un DAG representandouna serie de tares • La numeración indicael orden topológicode la tarea • Las flechas verdesrepresentan restricciones de precedencia Ref: The Standard Task Graph http://www.kasahara.elec.waseda.ac.jp/schedule/
Application • Otro orden topológicode un DAG • El camino critico en rojo es la secuenciade tareas que toman mástiempo 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 topológico toma otras consideraciones, específicamente, minimizar el tiempo total de ejecutar un conjunto de tareas • Veremos un planificador simple cuando se vean algoritmos greedy
Ordenamiento topológico • Para generar un ordenamiento topológico debemos empezar con un vértice que tenga un grado de entrada 0: 1
Ordenamiento topológico • En este punto, podemos ignorar estos arcos que conectan 1 con otros vértices y podemos elegir el vértice 2: 1, 2
Ordenamiento topológico • Elegimos entre 4, 5, o 3: 1, 2, 4
Ordenamiento topológico • Agregamos los vértices que llegan a 4 a los que ignoramos, podemos agreagar el 8 1, 2, 4, 8
Ordenamiento topológico • En este punto no se puede agregar 11, pues sigue a 9 en el ordenamiento topológico. Debemos elegir entre 5 o 3: 1, 2, 4, 8, 5
Ordenamiento topológico • Eliminando el 5 de consideración podemos ahora elegir los vértices 3 o 9Pero 3 debe preceder a 10: 1, 2, 4, 8, 5, 9
Ordenamiento topológico • Podemos agregar 11 a nuestro ordenamiento topológico 1, 2, 4, 8, 5, 9, 11
Ordenamiento topológico • El único vértice que tiene un grado de entrada con 0 es 3 1, 2, 4, 8, 5, 9, 11, 3
Ordenamiento topológico • Agregando 3,se puede elegir entre 6 o 7 1, 2, 4, 8, 5, 9, 11, 3, 6
Ordenamiento topológico • Agregando 6 podemos elegir entre los vértices 7 o 10 1, 2, 4, 8, 5, 9, 11, 3, 6, 10
Ordenamiento topológico • Como 7 debe preceder 12 en el ordenamiento topológico, debemos agregar 7 al ordenamiento 1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7
Ordenamiento topológico • En este punto se agrega 12 1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12
Ordenamiento topológico • Finalmente el vértice 13 1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12, 13
Ordenamiento topológico • En este punto no quedan vértices, y se ha completado el ordenamiento topológico en este grafo 1, 2, 4, 8, 5, 9, 11, 3, 6, 10, 7, 12, 13
Ordenamiento topológico • Es obvio que el ordenamiento topológico no es único • En cualquier punto donde existe una elección sobre cual vértice seguir tenemos posibilidades de formar un orden topológico diferente
Ordenamiento topológico • Por ejemplo, en esta etapa, podríamos elegir 7 en vez de 6: 1, 2, 4, 8, 5, 9, 11, 3, 7
Ordenamiento topológico • El orden topológico resultante podría ser entonces 1, 2, 4, 8, 5, 9, 11, 3, 7, 6, 10, 12, 13
Ordenamiento topológico • 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
Implementación • Qué se necesita para construir un ordenamiento topológico? • Suponga que tenemos un array con los grados de entrada de cada vértice
Implementación • Recorrido en amplitud • Creamos un contenedor (stack o cola) que contiene todos los vértices con grado de entrada 0
Implementación • Usamos una cola • La cola inicialmente contiene solo el vértice 1 • Podemos sacar 1 de la cola y agregar a nuestro ordenamiento topológico: 1
Implementación • Ahora con el recorrido en amplitud encolamos todos los vértices hijo • En este caso, decrementamos el grado de entrada de todos los vértices adyacentes al vértice desencolado
Implementación • 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
Implementación • Desencolamos 2, lo agregamos al ordenamiento topológico 1, 2y decrementamos los grados de entrada de los vértices 4 y 5 • Tanto 4 y 5 se reducen a cero, nuestra cola es: 3, 4, 5
Ejemplo • Considere el DAG con seis vértices
Ejemplo • Creamos la tabla con los grados de entrada
Ejemplo • Cremos una cola donde agregamos 1 y 6 Queue
Ejemplo • Desencolamos (1), decrementamos el grado de entrada de toos los vértices 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 vértice 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 vértices adyacentes para decrementar Queue Sort 1, 6, 2, 5, 3, 4