Suponha que eu tenha um gráfico acíclico direcionado com pesos em número real em seus vértices. Quero encontrar uma ordem topológica do DAG em que, para cada prefixo da ordem topológica, a soma dos pesos não seja negativa. Ou, se você preferir a terminologia teórica da ordem, tenho uma ordem parcial ponderada e desejo uma extensão linear de modo que cada prefixo tenha um peso não negativo. O que se sabe sobre esse problema? É NP completo ou solucionável em tempo polinomial?
ds.algorithms
directed-acyclic-graph
partial-order
David Eppstein
fonte
fonte
Respostas:
Esse problema parece ser muito semelhante ao SEQUENCING PARA MINIMIZAR O CUSTO CUMULATIVO MÁXIMO, problema [SS7] na Garey & Johnson . A saber:
Estou incerto se o problema permanece NP-completo quando é fixado a 0. G & J menção de que o problema permanece NP-completo se para todos os .K c(t)∈{−1,0,1} t∈T
fonte
Bem, minha resposta é minha pergunta, da qual se conclui que se você pudesse resolver esse problema em P, também poderia resolver outro problema em aberto: ordenação topológica positiva, faça 3
Editar: esse problema também se mostrou NP-completo, portanto seu problema já está NP-completo se o seu DAG tiver apenas dois níveis, ou seja, se não houver caminhos direcionados com duas arestas.
fonte
Se eu entendi o problema corretamente, acho que o problema de planejamento de máquina única com restrição de precedência para minimizar a soma ponderada dos tempos de conclusão (1 | prec | \ sum wc) pode ser reduzido ao problema que você está interessado. No problema 1 | prec | \ sum wc, temos n trabalhos, cada um com um peso não negativo e um tempo de processamento, um poset nos trabalhos e queremos uma extensão linear dos trabalhos, de modo que a soma ponderada dos tempos de conclusão dos trabalhos seja minimizado. O problema é NP-completo, apesar de assumirmos que o tempo de processamento de cada trabalho é igual a 1. Faz algum sentido?
fonte
E se sempre pegarmos o elemento máximo (na ordem parcial) com o menor peso. Depois de esgotarmos os elementos, devolvemos-os em ordem inversa à saída.
fonte
Esse problema me lembra muitas árvores de decisão. Eu consideraria esse tipo de solução, que tenta sempre escolher o caminho mais promissor, mas olhando para todo o subgráfico:
A partir dos nós do coletor, trabalhe em direção às fontes, um nível de cada vez. Enquanto você faz isso, dê um peso a cada borda. Esse peso deve representar o valor mínimo que você terá que "pagar" ou "ganhará" atravessando o subgráfico a partir do nó para o qual a borda aponta. Suponha que estejamos no nível i + 1 e subamos para o nível i. Isto é o que eu faria para atribuir um peso para uma borda apontando para um nó do nível i:
Em seguida, crie a ordem da seguinte maneira:
A idéia é atravessar os subgráficos que darão o maior ganho possível primeiro, para poder suportar o custo dos subgráficos de peso negativo posteriormente.
fonte