Supongamos que tengo un gráfico acíclico dirigido con pesos de números reales en sus vértices. Quiero encontrar un orden topológico del DAG en el que, para cada prefijo del orden topológico, la suma de los pesos no sea negativa. O si prefiere la terminología de la teoría del orden, tengo un orden parcial ponderado y quiero una extensión lineal para que cada prefijo tenga un peso no negativo. ¿Qué se sabe sobre este problema? ¿Es NP completo o solucionable en tiempo polinómico?
ds.algorithms
directed-acyclic-graph
partial-order
David Eppstein
fuente
fuente
Respuestas:
Este problema parece ser muy similar a SECUENCIAR PARA MINIMIZAR EL COSTO ACUMULADO MÁXIMO, problema [SS7] en Garey & Johnson . Esto es:
fuente
Bueno, mi respuesta es mi pregunta de la cual resulta que si pudieras resolver este problema en P, también podrías resolver otro problema abierto: ordenamiento topológico positivo, toma 3
Editar: este problema también resultó ser NP-completo, por lo que su problema ya está NP-completo si su DAG tiene solo dos niveles, es decir, si no hay rutas dirigidas con dos bordes.
fuente
Si entiendo el problema correctamente, creo que la precedencia restringió el problema de programación de una sola máquina para minimizar la suma ponderada de los tiempos de finalización (1 | prec | \ sum wc) puede reducirse al problema que le interesa. En el problema 1 | prec | \ sum wc tenemos n trabajos, cada uno con un peso no negativo y un tiempo de procesamiento, un poset en los trabajos y queremos una extensión lineal de los trabajos de modo que la suma ponderada de los tiempos de finalización de los trabajos sea minimizado. El problema es NP-completo aunque suponemos que el tiempo de procesamiento de cada trabajo es igual a 1. ¿Tiene algún sentido?
fuente
¿Qué pasa si siempre tomamos el elemento máximo (en el orden parcial) con el menor peso? Después de agotar los elementos, los devolvemos en orden inverso como la salida.
fuente
Este problema me recuerda muchos árboles de decisión. Consideraría este tipo de solución, que trata de elegir siempre el camino más prometedor, pero mirando todo el subgráfico:
Comenzando desde los nodos de sumidero, avance hacia las fuentes, un nivel a la vez. Mientras haces esto, dale peso a cada borde. Este peso debe representar la cantidad mínima que tendrá que "pagar" o "ganará" atravesando el subgráfico comenzando desde el nodo al que apunta el borde. Supongamos que estamos en el nivel i + 1 y estamos subiendo al nivel i. Esto es lo que haría para asignar un peso para un borde que apunta a un nodo de nivel i:
Luego, cree el orden de la siguiente manera:
La idea es atravesar esos subgrafos que darán la mayor ganancia posible primero, para poder soportar el costo de los subgrafos de peso negativo más tarde.
fuente