É difícil encontrar um caminho com mais vértices vermelhos do que vértices azuis?

7

Dado um gráfico direcionado conectado G=(V,E)vértices s,tV e uma coloração, st s e tsão pretos e todos os outros vértices são vermelhos ou azuis , é possível encontrar um caminho simples a partir des para t com mais vértices vermelhos do que azuis em tempo polinomial?

Eu acho que deveria ser possível, mas nosso TA disse que isso era difícil para o NP.

Idéia para uma solução:

De G crio G=(V,E) do seguinte modo:

  • Dividir tudo vV{s,t} em dois vértices vin e vout. V é composto pelos pares de vértices divididos e s e t.

  • Para todos e=(u,v)E introduzir uma vantagem (uout,vin). (Para borda(x,v) ou (u,x) Onde x{s,t} criar aresta (x,vin) ou (uout,x)resp.). Além disso, introduza uma vantagem(vin,vout)para qualquer um dos vértices divididos. assimE contém dois tipos de arestas: as que correspondem às arestas de E e os que correspondem aos vértices de V.

Agora, apresentamos os pesos da seguinte forma:

  • w((vin,vout))=1 se o vértice correspondente vestava vermelho .
  • w((vin,vout))=+1 se o vértice correspondente vera azul .
  • w(e)=0 para todas as outras arestas, ou seja, as que correspondem às arestas G ao invés de vértices.

Agora, conduza um algoritmo para os caminhos mais curtos de sua escolha, como Dijkstra, Bellman-Ford, ..., verifique se o comprimento do caminho especificado é <0 e você terminou.

Por que isso não funciona? É porque podemos ter ciclos negativos? Poderíamos detectar aqueles com Bellman Ford, mas teríamos que encontrar o caminho desejado com meios não eficientes, tornando difícil esse problema de decisão? Existe uma redução elegante para mostrar a dureza NP?

Valerie Poulain
fonte

Respostas:

9

Sua solução não funciona porque Dijkstra e Bellman-Ford não podem interpretar o recurso "caminho simples". E eles realmente cairão em qualquer ciclo negativo.

Eu acho que o melhor para mostrar a completude do NP é usar o problema do caminho hamiltoniano. Vamos pegar um gráficoG do N vértices vermelhos.

Então você constrói um gráfico Gadicionando s, t e N1 vértices azuis para G. Você primeiro encadeia com arestas todos os vértices azuis da origem até o último azul (s->b1->b2-> ...->bN1) Então você coloca arestas debN1 para cada vértice vermelho e uma aresta de todo vértice vermelho para t.

Então, um único caminho de s para t passa necessariamente por todos os nós azuis (N1) e, em seguida, precisa passar para todos os nós vermelhos (N) para responder a

Existe um caminho simples no G de s para t com mais vértices vermelhos do que azuis?

que é, assim, uma resposta para:

Existe um caminho hamiltoniano em G

Portanto, seu problema é realmente NP-completo.

Optidad
fonte
11
Legal, obrigado. Então, se eu quisesse provar formalmenteDHPProblemAbove onde eu tenho que começar com uma instância G,s,t para o caminho hamiltoniano e mapeie-o para uma instância G,s,t deste problema, eu poderia fazer o seguinte: Colora todos os vértices existentes em vermelho, adicione |V{s,t}|1 vértices azuis e conectá-los em uma cadeia (b1)(bn). Adicione uma aresta(s,b1)e para cada (s,v) no G uma borda (bn,v) no G, o resto permanece como está.
Valerie Poulain
11
Sim, eu não estou muito familiarizado com a demonstração de completude do NP, mas desta maneira para apresentá-lo é claramente melhor. No entanto, eu começaria com uma instância deG sem s & tcomo o problema inicial do caminho hamiltoniano não possui vértice específico.
Opção 03/04
2
Votado por (acho) correção; mas esse argumento seria MUITO mais fácil de entender se você COMEÇAR com o gráfico arbitrárioG e, em seguida, incorporado dentro do especialmente construído G. No momento, a redução está oculta inteiramente na frase "Finalmente, você coloca qualquer número de arestas entre os vértices vermelhos", que eu perdi na minha primeira leitura. "Qualquer número de arestas" é o código para "você escolhe qualquer gráfico arbitrárioGcujo caminho Hamiltoniano que você gostaria de descobrir, e incorporá-lo lá dentro." Aquela que torna esta uma redução válido.
Quuxplusone
11
@ Quuxplusone, você está certo, eu edito para torná-lo mais claro.
Optidad 4/04/19
@ValeriePoulain: Vince está certo de que os vértices inicial e final não são fornecidos para o problema comum da HP, mas se forem fornecidos, sua redução precisará de um pequeno ajuste: você deve inserir uma cadeia de |V{s,t}|1vértices azuis em uma linha ao longo de cada extremidadese qualquer outro vértice vermelho. Isso evita, por exemplo, que uma única bordaspara algum vértice vermelho de ser uma solução válida para a instância construída.
Jrandom_hacker 4/04/19