problema del camino más largo es el problema de encontrar un camino simple de longitud máxima en un gráfico dado. Una ruta se llama simple si no tiene vértices repetidos; la longitud de una trayectoria puede medirse por su número de bordes, o (en gráficos ponderados ) por la suma de los pesos de sus bordes. En contraste con el problema de la ruta más corta , que puede resolverse en tiempo polinomial en gráficos sin ciclos de peso negativo, el problema de la ruta más larga es NP-hard y la versión de decisión del problema, que pregunta si existe una ruta de al menos alguna dada. longitud, es NP-completa. Esto significa que el problema de decisión no se puede resolver en tiempo polinomial para gráficos arbitrarios a menos que P = NP . También se conocen resultados de dureza más fuertes que muestran que es difícil aproximarse . Sin embargo, tiene una solución de tiempo lineal para gráficos acíclicos dirigidos , que tiene aplicaciones importantes para encontrar la ruta crítica en los problemas de programación.
Dureza NP [ editar ]
La dureza NP del problema del camino más largo no ponderado se puede mostrar usando una reducción del problema del camino Hamiltoniano : un gráfico G tiene un camino Hamiltoniano si y solo si su camino más largo tiene la longitud n - 1, donde n es el número de vértices en G . Debido a que el problema de la ruta hamiltoniana es NP-completo, esta reducción muestra que la versión de decisión del problema de la ruta más larga también es NP-completa. En este problema de decisión, la entrada es un gráfico G y un número k ; la salida deseada es "sí" si G contiene una ruta de k o más bordes, y no lo contrario. [1]
Si el problema de la ruta más larga podría resolverse en tiempo polinomial, podría usarse para resolver este problema de decisión, encontrando una ruta más larga y luego comparando su longitud con el número k . Por lo tanto, el problema del camino más largo es NP-duro. La pregunta "¿existe una ruta simple en un gráfico dado con al menos k bordes" es NP-completa. [2]
En los gráficos completos ponderados con ponderaciones de borde no negativas, el problema de la ruta más larga ponderada es el mismo que el problema de la ruta del vendedor ambulante , porque la ruta más larga siempre incluye todos los vértices. [3]
Acíclicos gráficos y rutas críticas [ editar ]
Un camino más largo entre dos vértices dados s y t en un gráfico ponderado G es la misma cosa que un camino más corto en un gráfico - G derivado de G cambiando cada peso a su negación. Por lo tanto, si los caminos más cortos se pueden encontrar en - G , entonces los caminos más largos también pueden ser encontrados en G . [4]
Para la mayoría de los gráficos, esta transformación no es útil, ya que crea ciclos de longitud negativa en - G . Pero si G es un gráfico acíclico dirigido , entonces no se pueden crear ciclos negativos, y se puede encontrar una ruta más larga en G en tiempo lineal aplicando un algoritmo de tiempo lineal para las rutas más cortas en - G , que también es un gráfico acíclico dirigido. [4] Por ejemplo, para cada vértice v en un DAG dado, la longitud del camino más largo que termina en v se puede obtener mediante los siguientes pasos:
- Encontrar un ordenamiento topológico del DAG dado.
- Para cada vértice v del DAG, en el ordenamiento topológico, calcule la longitud del camino más largo que termina en v mirando sus vecinos entrantes y agregando uno a la longitud máxima registrada para esos vecinos. Si v no tiene vecinos entrantes, establezca la longitud de la ruta más larga que termina en v en cero. En cualquier caso, registre este número para que los pasos posteriores del algoritmo puedan acceder a él.
Una vez hecho esto, se puede obtener la ruta más larga en todo el DAG comenzando en el vértice v con el mayor valor registrado, luego retrocediendo repetidamente hacia su vecino entrante con el mayor valor registrado, e invirtiendo la secuencia de vértices que se encuentran en de esta manera.
El método de ruta crítica para programar un conjunto de actividades implica la construcción de un gráfico acíclico dirigido en el que los vértices representan hitos del proyecto y los bordes representan actividades que deben realizarse después de un hito y antes de otro; cada borde está ponderado por una estimación de la cantidad de tiempo que llevará completar la actividad correspondiente. En tal gráfico, la ruta más larga desde el primer hito hasta la última es la ruta crítica, que describe el tiempo total para completar el proyecto. [4]
Las rutas más largas de los gráficos acíclicos dirigidos también se pueden aplicar en un dibujo de capas : la asignación de cada vértice v de una gráfica acíclica dirigida G a la capa cuyo número es la longitud de la ruta más larga que termina en v da como resultado una asignación de capa para G con el mínimo posible número de capas. [5]
Aproximación [ editar ]
Björklund, Husfeldt y Khanna (2004) escriben que el problema del camino más largo en gráficos no direccionados no ponderados "es notorio por la dificultad de comprender su dureza de aproximación". [6] El mejor algoritmo de aproximación de tiempo polinomial conocido para este caso logra solo una relación de aproximación muy débil,. [7] Para todos, no es posible aproximar el camino más largo dentro de un factor dea menos que NP esté contenido dentro del tiempo determinístico cuasi-polinomial ; sin embargo, existe una gran brecha entre este resultado de inoportabilidad y los algoritmos de aproximación conocidos para este problema. [8]
En el caso de gráficos no ponderados pero dirigidos, se conocen resultados de inoportabilidad sólidos. Para cada El problema no puede ser aproximado a un factor de a menos que P = NP, y con supuestos teóricos de complejidad más fuertes, no se pueda aproximar a un factor de . [6] La técnica de codificación por colores se puede utilizar para encontrar rutas de longitud logarítmica, si existen, pero esto da una relación de aproximación de solo. [9]
Complejidad parametrizada [ editar ]
El problema de la ruta más larga es manejable por parámetros fijos cuando está parametrizado por la longitud de la ruta. Por ejemplo, se puede resolver en tiempo lineal en el tamaño del gráfico de entrada (pero exponencial en la longitud de la ruta), mediante un algoritmo que realiza los siguientes pasos:
- Realice una búsqueda en profundidad de la gráfica. Dejarser la profundidad del árbol de búsqueda primero en profundidad resultante .
- Utilice la secuencia de rutas de raíz a hoja del árbol de búsqueda en profundidad, en el orden en que fueron atravesadas por la búsqueda, para construir una descomposición de ruta del gráfico, con el ancho de ruta.
- Aplique programación dinámica a esta descomposición de ruta para encontrar la ruta más larga en el tiempo, dónde Es el número de vértices en la gráfica.
Dado que la ruta de salida tiene una longitud al menos tan grande como , el tiempo de ejecución también está limitado por , dónde es la longitud del camino más largo. [10] Usando el código de colores, la dependencia de la longitud del camino puede reducirse a exponencial simple. [9] [11] [12] [13] Una técnica de programación dinámica similar muestra que el problema de la ruta más larga también es manejable por parámetros fijos cuando está parametrizado por el ancho de árbol del gráfico.
Para gráficos de ancho de clique acotado , la ruta más larga también puede resolverse mediante un algoritmo de programación dinámica de tiempo polinomial. Sin embargo, el exponente del polinomio depende del ancho de clique de la gráfica, por lo que este algoritmo no es manejable por parámetros fijos. El problema de la ruta más larga, parametrizado por clique-width, es difícil para la clase de complejidad parametrizada, mostrando que es poco probable que exista un algoritmo manejable de parámetro fijo. [14]
Clases especiales de grafos [ editar ]
Dijkstra propuso un algoritmo de tiempo lineal para encontrar la ruta más larga en un árbol en la década de 1960, mientras que en 2002 se publicó una prueba formal de este algoritmo. [15] Además, la ruta más larga se puede calcular en tiempo polinomial en árboles ponderados, en gráficos de bloques, en cactus, [16] en gráficos de permutación bipartita, [17] y en gráficos ptolemaicos . [18]
Para la clase de gráficos de intervalo , unSe conoce el algoritmo de tiempo, que utiliza un enfoque de programación dinámica. [19] Este enfoque de programación dinámica ha sido explotado para obtener algoritmos de tiempo polinomial en las clases mayores de gráficos de arco circular [20] y de gráficos de comparabilidad (es decir, de los complementos de gráficos de comparabilidad , que también contienen gráficos de permutación ), [21]ambos tienen el mismo tiempo de ejecución. El último algoritmo se basa en las propiedades especiales del ordenamiento de vértices de la búsqueda por profundidad de lexicografía (LDFS) [22] de los gráficos de comparabilidad. Para los gráficos de comparabilidad también un algoritmo de tiempo polinomial alternativo con mayor tiempo de ejecuciónes conocido, que se basa en el diagrama de Hasse del conjunto parcialmente ordenado definido por el complemento del gráfico de co-comparabilidad de entrada. [23]
Además, el problema del camino más largo se puede resolver en tiempo polinomial en cualquier clase de gráficos con ancho de árbol acotado o ancho de camarilla acotado, como los gráficos de distancia hereditaria . Finalmente, es claramente NP-duro en todas las clases de gráficos en las que el problema de la trayectoria de Hamilton es NP-duro, como en gráficos divididos , gráficos circulares y gráficos planares .
El algoritmo de Borůvka es un algoritmo codicioso para encontrar un árbol de expansión mínimo en un gráfico para el que todos los pesos de bordes son distintos, o un bosque de expansión mínimo en el caso de un gráfico que no está conectado.
Fue publicado por primera vez en 1926 por Otakar Borůvkacomo un método para construir una red eléctrica eficiente para Moravia . [1] [2] [3] El algoritmo fue redescubierto por Choquet en 1938; [4] nuevamente por Florek , Łukasiewicz , Perkal , Steinhaus y Zubrzycki en 1951; [5] y nuevamente por Georges Sollin en 1965. [6] Este algoritmo es frecuentemente llamado algoritmo de Sollin , especialmente en la literatura de computación paralela .
El algoritmo comienza por encontrar el borde de menor peso que incide en cada vértice del gráfico y agregar todos esos bordes al bosque. Luego, repite un proceso similar para encontrar el borde de peso mínimo de cada árbol construido hasta el momento en un árbol diferente, y agregar todos esos bordes al bosque. Cada repetición de este proceso reduce el número de árboles, dentro de cada componente conectado del gráfico, a la mitad de este valor anterior, por lo que, después de muchas repeticiones logarítmicas, el proceso finaliza. Cuando lo hace, el conjunto de bordes que ha agregado forma el bosque de expansión mínimo.
No hay comentarios:
Publicar un comentario