Esta é minha abordagem pessoal para determinar se um problema (ou seja, um idioma ) é NP completo ou não. Se ambas as condições forem verificadas:eu
- Eu sinto que o teste se uma instância está em L implica que eu preciso verificar todas as combinações de algum tipoEuL
- e que não há como dividir essa combinação em duas menores
L
SSS1S2S1S2
ACBABBC
Francamente, essa abordagem é muito básica: tento encontrar um algoritmo (polinomial) para o problema em questão. Se não consigo encontrar um, o problema se torna "difícil" no meu ponto de vista. A seguir, vem todo o raciocínio de NP-completeness: poderei codificar um problema de NP-complete existente para este? (E como isso geralmente é muito mais difícil, tento mais uma vez encontrar um algoritmo polinomial ..)
Eu suspeito que essa é a maneira usual de pensar. No entanto, permanece bastante difícil de aplicar em problemas desconhecidos. Pessoalmente, lembro-me de ter sido surpreendido por um dos primeiros exemplos de completude de PN que me disseram: o problema da camarilha . Parecia tão simples de verificar! Então, suponho que a experiência tenha muito a ver com isso. Também a intuição pode ser inútil às vezes. Lembro-me de ter dito várias vezes dois problemas quase idênticos, mas um estava em P e o outro com uma pequena variação era NP-completo.
Ainda estou para encontrar um bom exemplo (preciso de ajuda aqui), mas isso é como o problema pós-correspondência : esse é um problema indecidível, mas algumas variantes são decidíveis.