stringtranslate.com

Algoritmo de Coffman-Graham

El algoritmo de Coffman-Graham es un algoritmo para organizar los elementos de un conjunto parcialmente ordenado en una secuencia de niveles. El algoritmo elige una disposición tal que un elemento que viene después de otro en el orden se asigna a un nivel inferior, y de modo que cada nivel tenga un número de elementos que no exceda un ancho fijo límite W. Cuando W = 2 , utiliza el mínimo número posible de niveles distintos y, en general, utiliza como máximo 2 − 2/ W veces tantos niveles como sea necesario.

Lleva el nombre de Edward G. Coffman, Jr. y Ronald Graham , quienes lo publicaron en 1972 para una aplicación en la programación de talleres de trabajo . En esta aplicación, los elementos que se ordenarán son trabajos, el límite W es el número de trabajos que se pueden programar en cualquier momento y el orden parcial describe las relaciones de requisitos previos entre los trabajos. El objetivo es encontrar un cronograma que complete todos los trabajos en un tiempo total mínimo. Posteriormente, el mismo algoritmo también se ha utilizado en el dibujo de gráficos , como una forma de colocar los vértices de un gráfico dirigido en capas de anchos fijos de modo que la mayoría o todos los bordes se dirijan consistentemente hacia abajo.

Para un orden parcial dado por su reducción transitiva (relación de cobertura), el algoritmo de Coffman-Graham se puede implementar en tiempo lineal utilizando la estructura de datos de refinamiento de partición como subrutina. Si no se da la reducción transitiva, se necesita tiempo polinómico para construirla.

Planteamiento del problema y aplicaciones.

En la versión del problema de programación de talleres resuelto por el algoritmo de Coffman-Graham, se da un conjunto de n trabajos J 1 , J 2 , ..., J n , junto con un sistema de restricciones de precedencia Ji < J j Requiriendo que el trabajo Ji se complete antes de que comience el trabajo J j . Se supone que cada trabajo requiere una unidad de tiempo para completarse. La tarea de programación consiste en asignar cada uno de estos trabajos a intervalos de tiempo en un sistema de W procesadores idénticos, minimizando el tiempo de duración de la asignación (el tiempo desde el comienzo del primer trabajo hasta la finalización del trabajo final). De manera abstracta, las restricciones de precedencia definen un orden parcial en los trabajos, por lo que el problema puede reformularse como uno de asignación de los elementos de este orden parcial a niveles (intervalos de tiempo) de tal manera que cada intervalo de tiempo tenga como máximo tantos trabajos como procesadores (como máximo W elementos por nivel), respetando las restricciones de precedencia. Esta aplicación fue la motivación original para que Coffman y Graham desarrollaran su algoritmo. [1] [2]

En el marco de dibujo de gráficos en capas descrito por Sugiyama, Tagawa y Toda (1981) [3] la entrada es un gráfico dirigido , y el dibujo de un gráfico se construye en varias etapas: [4] [5]

  1. Se elige un conjunto de arcos de retroalimentación y los bordes de este conjunto se invierten para convertir la entrada en un gráfico acíclico dirigido con (si es posible) pocos bordes invertidos.
  2. A los vértices del gráfico se les dan coordenadas y enteras de tal manera que, para cada borde, el vértice inicial del borde tiene una coordenada más alta que el vértice final, y como máximo W vértices comparten la misma coordenada y . De esta manera, todos los bordes del gráfico acíclico dirigido y la mayoría de los bordes del gráfico original estarán orientados consistentemente hacia abajo.
  3. Se introducen vértices ficticios dentro de cada borde de modo que todos los bordes subdivididos conecten pares de vértices que se encuentran en niveles adyacentes del dibujo.
  4. Dentro de cada grupo de vértices con la misma coordenada y , los vértices se permutan para minimizar el número de cruces en el dibujo resultante, y a los vértices se les asignan coordenadas x consistentemente con esta permutación.
  5. Los vértices y aristas del gráfico se dibujan con las coordenadas que se les asignan.

En este marco, la asignación de coordenadas y nuevamente implica agrupar elementos de un conjunto parcialmente ordenado (los vértices del gráfico, con el orden de accesibilidad en el conjunto de vértices) en capas (conjuntos de vértices con la misma coordenada y ), que es el problema resuelto por el algoritmo de Coffman-Graham. [4] Aunque existen enfoques alternativos al algoritmo de Coffman-Graham para el paso de capas, estas alternativas en general no pueden incorporar un límite en el ancho máximo de un nivel o dependen de procedimientos complejos de programación de enteros . [6]

De manera más abstracta, ambos problemas pueden formalizarse como un problema en el que la entrada consta de un conjunto parcialmente ordenado y un número entero W. El resultado deseado es una asignación de números de nivel entero a los elementos del conjunto parcialmente ordenado de modo que, si x < y es un par ordenado de elementos relacionados del orden parcial, el número asignado a x es menor que el número asignado a y , de modo que como máximo a W elementos se les asigne el mismo número entre sí, y minimizando la diferencia entre los números asignados más pequeños y más grandes.

el algoritmo

El algoritmo de Coffman-Graham realiza los siguientes pasos. [4]

  1. Representar el orden parcial por su reducción transitiva o relación de cobertura , un grafo acíclico dirigido G que tiene una arista de x a y siempre que x < y y no existe ningún tercer elemento z del orden parcial para el cual x < z < y . En las aplicaciones de dibujo de gráficos del algoritmo de Coffman-Graham, el gráfico acíclico dirigido resultante puede no ser el mismo que el gráfico que se está dibujando, y en las aplicaciones de programación puede no tener una ventaja para cada restricción de precedencia de la entrada: en ambos casos , la reducción transitiva elimina los bordes redundantes que no son necesarios para definir el orden parcial.
  2. Construya un ordenamiento topológico de G en el que los vértices estén ordenados lexicográficamente por el conjunto de posiciones de sus vecinos entrantes. Para hacerlo, agregue los vértices uno a la vez al ordenamiento, eligiendo en cada paso un vértice v para agregar de manera que los vecinos entrantes de v ya formen parte del ordenamiento parcial, y de modo que el vecino entrante agregado más recientemente de v es anterior al vecino entrante agregado más recientemente de cualquier otro vértice que podría agregarse en lugar de v . Si dos vértices tienen el mismo vecino entrante agregado más recientemente, el algoritmo rompe el empate a favor de aquel cuyo segundo vecino entrante agregado más recientemente es anterior, etc.
  3. Asigne los vértices de G a niveles en orden inverso al orden topológico construido en el paso anterior. Para cada vértice v , agregue v a un nivel que sea al menos un paso más alto que el nivel más alto de cualquier vecino saliente de v , que aún no tenga W elementos asignados y que sea lo más bajo posible sujeto a estos dos restricciones.

Análisis

Calidad de salida

Como demostraron originalmente Coffman y Graham (1972), su algoritmo calcula una asignación óptima para W = 2 ; es decir, para problemas de programación con trabajos de longitud unitaria en dos procesadores, o para problemas de dibujo de gráficos en capas con como máximo dos vértices por capa. [1] Un algoritmo estrechamente relacionado también encuentra la solución óptima para programar trabajos con diferentes duraciones, permitiendo adelantarse a los trabajos programados, en dos procesadores. [7] Para W > 2 , el algoritmo de Coffman-Graham utiliza una cantidad de niveles (o calcula un cronograma con un makepan) que está dentro de un factor de 2 − 2/ W del óptimo. [8] [9] Por ejemplo, para W = 3 , esto significa que utiliza como máximo 4/3 veces más niveles de los óptimos. Cuando el orden parcial de las restricciones de precedencia es un orden de intervalo , o pertenece a varias clases relacionadas de órdenes parciales, el algoritmo de Coffman-Graham encuentra una solución con el número mínimo de niveles independientemente de su límite de ancho. [10]

Además de encontrar programas con un makespan pequeño, el algoritmo de Coffman-Graham (modificado de la presentación aquí para que ordene topológicamente el gráfico inverso de G y coloque los vértices lo más temprano posible en lugar de lo más tarde posible) minimiza el tiempo total de flujo. de programas de dos procesadores, la suma de los tiempos de finalización de los trabajos individuales. Se puede utilizar un algoritmo relacionado para minimizar el tiempo total de flujo para una versión del problema en la que se permite la preferencia de trabajos. [11]

Complejidad del tiempo

Coffman y Graham (1972) y Lenstra y Rinnooy Kan (1978) [12] establecen que la complejidad temporal del algoritmo de Coffman-Graham, en un orden parcial de n elementos, es O ( n 2 ) . Sin embargo, este análisis omite el tiempo para construir la reducción transitiva, que no se sabe que sea posible dentro de este límite. Sethi (1976) muestra cómo implementar la etapa de ordenamiento topológico del algoritmo en tiempo lineal , basándose en la idea de refinamiento de partición . [13] Sethi también muestra cómo implementar la etapa de asignación de niveles del algoritmo de manera eficiente mediante el uso de una estructura de datos de conjuntos separados . En particular, con una versión de esta estructura publicada posteriormente por Gabow y Tarjan (1985), esta etapa también requiere tiempo lineal. [14]

Referencias

  1. ^ ab Coffman, EG Jr .; Graham, RL (1972), "Programación óptima para sistemas de dos procesadores" (PDF) , Acta Informatica , 1 (3): 200–213, doi :10.1007/bf00288685, MR  0334913, S2CID  40603807.
  2. ^ Leung, Joseph Y.-T. (2004), "Algunos algoritmos de programación básicos", Manual de programación: algoritmos, modelos y análisis de rendimiento , CRC Press, ISBN 978-1-58488-397-5.
  3. ^ Sugiyama, Kozo; Tagawa, Shôjirô; Toda, Mitsuhiko (1981), "Métodos para la comprensión visual de las estructuras jerárquicas de los sistemas", IEEE Transactions on Systems, Man, and Cybernetics , SMC-11 (2): 109–125, doi :10.1109/TSMC.1981.4308636, MR  0611436, S2CID  8367756.
  4. ^ abc di Battista, Giuseppe; Eades, Pedro ; Tamasia, Roberto ; Tollis, Ioannis G. (1999), "Capítulo 9: Dibujos en capas de dígrafos", Dibujo de gráficos: algoritmos para la visualización de gráficos , Prentice Hall, págs..
  5. ^ Bastardo, Oliver; Matuszewski, Christian (2001), "Dibujos en capas de dígrafos", en Kaufmann, Michael; Wagner, Dorothea (eds.), Dibujo de gráficos: métodos y modelos , Apuntes de conferencias sobre informática, vol. 2025, Springer-Verlag, págs. 87–120, doi :10.1007/3-540-44969-8_5. Bastert y Matuszewski también incluyen una descripción del algoritmo de Coffman-Graham; sin embargo, omiten la etapa de reducción transitiva del algoritmo.
  6. ^ Healy, Patricio; Nikolov, Nikola S. (2002), "Cómo superponer un gráfico acíclico dirigido", Dibujo de gráficos: noveno simposio internacional, GD 2001 Viena, Austria, 23 al 26 de septiembre de 2001, artículos revisados , notas de conferencias sobre informática, vol. 2265, Springer-Verlag, págs. 16 a 30, doi : 10.1007/3-540-45848-4_2 , SEÑOR  1962416.
  7. ^ Muntz, RR; Coffman, EG (1969), "Programación preventiva óptima en sistemas de dos procesadores", IEEE Transactions on Computers , 18 (11): 1014–1020, doi :10.1109/TC.1969.222573, S2CID  206617438.
  8. ^ Lam, Shui; Sethi, Ravi (1977), "Análisis del peor de los casos de dos algoritmos de programación", SIAM Journal on Computing , 6 (3): 518–536, doi :10.1137/0206037, MR  0496614.
  9. ^ Braschi, Bertrand; Trystram, Denis (1994), "Una nueva visión del algoritmo de Coffman-Graham", SIAM Journal on Computing , 23 (3): 662–669, doi :10.1137/S0097539790181889, MR  1274650.
  10. ^ Chardón, Marc; Moukrim, Aziz (2005), "El algoritmo de Coffman-Graham resuelve de manera óptima los sistemas de tareas UET con órdenes de sobreintervalo", SIAM Journal on Discrete Mathematics , 19 (1): 109–121, doi :10.1137/S0895480101394999, MR  2178187.
  11. ^ Coffman, EG Jr .; Sethuraman, J.; Timkovsky, VG (2003), "Programaciones preventivas ideales en dos procesadores", Acta Informatica , 39 (8): 597–612, doi :10.1007/s00236-003-0119-6, MR  1996238, S2CID  7016804.
  12. ^ Lenstra, JK ; Rinnooy Kan, AHG (1978), "Complejidad de la programación bajo restricciones de precedencia", Investigación de operaciones , 26 (1): 22–35, doi :10.1287/opre.26.1.22, hdl : 10338.dmlcz/141477 , JSTOR  169889, Señor  0462553.
  13. ^ Sethi, Ravi (1976), "Programación de gráficos en dos procesadores", SIAM Journal on Computing , 5 (1): 73–82, doi :10.1137/0205005, MR  0398156.
  14. ^ Gabow, Harold N .; Tarjan, Robert Endre (1985), "Un algoritmo de tiempo lineal para un caso especial de unión de conjuntos disjuntos", Journal of Computer and System Sciences , 30 (2): 209–221, doi : 10.1016/0022-0000(85) 90014-5 , señor  0801823.