Respostas:
Para mostrar que um problema é NP completo, você precisa:
Em outras palavras, com algumas informações C
, você pode criar um algoritmo de tempo polinomial V
que verificará para cada entrada possível X
se X
está em seu domínio ou não.
Prove que o problema de coberturas de vértices (isto é, para algum gráfico G
, ele tem um conjunto de cobertura de vértices de tamanho k
tal que cada aresta em G
tem pelo menos um vértice no conjunto de cobertura ?) Está em NP:
nossa entrada X
é algum gráfico G
e algum número k
(isto é da definição do problema)
Considere nossas informações C
como "qualquer subconjunto possível de vértices no gráfico G
de tamanho k
"
Então, podemos escrever um algoritmo V
que, dado G
, k
e C
, retornará se aquele conjunto de vértices é uma cobertura de vértice para G
ou não, em tempo polinomial .
Então, para cada gráfico G
, se existe algum "possível subconjunto de vértices em G
de tamanho k
" que é uma cobertura de vértice, então G
é em NP
.
Observe que não precisamos encontrar C
em tempo polinomial. Se pudéssemos, o problema seria em `P.
Observe que o algoritmo V
deve funcionar para todos G
, para alguns C
. Para cada entrada deve haver informações que possam nos ajudar a verificar se a entrada está no domínio do problema ou não. Ou seja, não deve haver uma entrada onde a informação não existe.
Isso envolve a obtenção de um problema NP-completo conhecido como SAT , o conjunto de expressões booleanas na forma:
(A ou B ou C) e (D ou E ou F) e ...
onde a expressão é satisfazível , ou seja, existe alguma configuração para esses booleanos, o que torna a expressão verdadeira .
Em seguida, reduza o problema NP-completo ao seu problema em tempo polinomial .
Isto é, dado alguma entrada X
para SAT
(ou qualquer problema NP-completo que você está usando), crie alguma entrada Y
para o seu problema, de modo que X
esteja no SAT se e somente se Y
estiver no seu problema. A função f : X -> Y
deve ser executada em tempo polinomial .
No exemplo acima, a entrada Y
seria o gráfico G
e o tamanho da cobertura do vértice k
.
Para uma prova completa , você teria que provar ambos:
isso X
está em SAT
=> Y
no seu problema
e Y
no seu problema => X
em SAT
.
A resposta de marcog tem um link com vários outros problemas NP-completos que você poderia reduzir ao seu problema.
Nota de rodapé: Na etapa 2 ( Prove que é NP-difícil ), reduzir outro problema NP-difícil (não necessariamente NP-completo) para o problema atual, uma vez que problemas NP-completos são um subconjunto de problemas NP-difíceis (que são também no NP).
Você precisa reduzir um problema NP-Completo ao seu problema. Se a redução pode ser feita em tempo polinomial, então você provou que seu problema é NP-completo, se o problema já estiver em NP, porque:
Não é mais fácil do que o problema NP-completo, pois pode ser reduzido a ele em tempo polinomial, o que torna o problema NP-Difícil.
Veja o final de http://www.ics.uci.edu/~eppstein/161/960312.html para mais.
Para provar que um problema L é NP-completo, precisamos seguir os seguintes passos:
Primeiro, você mostra que está em NP em tudo.
Então você encontra outro problema que você já sabe que é NP completo e mostra como você reduz polinomialmente o problema NP Difícil ao seu problema.