Dado um gráfico direcionado conectado vértices e uma coloração, st e são pretos e todos os outros vértices são vermelhos ou azuis , é possível encontrar um caminho simples a partir de para 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 crio do seguinte modo:
Dividir tudo em dois vértices e . é composto pelos pares de vértices divididos e e .
Para todos introduzir uma vantagem . (Para borda ou Onde criar aresta ou resp.). Além disso, introduza uma vantagempara qualquer um dos vértices divididos. assim contém dois tipos de arestas: as que correspondem às arestas de e os que correspondem aos vértices de .
Agora, apresentamos os pesos da seguinte forma:
- se o vértice correspondente estava vermelho .
- se o vértice correspondente era azul .
- para todas as outras arestas, ou seja, as que correspondem às arestas 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 é 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?
fonte