Estou estudando a complexidade computacional e fiquei pensando por que os problemas do NP-Complete (NPC) são uma classe importante. Acho óbvio por que estamos interessados em mostrar que um determinado problema de NP é difícil de NP.
Eu também entendo a definição de NPC, e que mostrar um determinado problema de decisão é difícil para o NP, sabendo que ele está no NP, é exatamente o que significa o NPC.
No entanto, o que não entendo é: por que esse conceito é tão importante? Certamente, se encontrarmos qualquer algoritmo NP-hard que corre no tempo P (ou não que está em NP), temos mostrado que .
Por que esse conceito é tão importante?
complexity-theory
np-complete
Amnestic
fonte
fonte
Respostas:
Há pelo menos alguns motivos pelos quais o NPC é interessante:
Em outras palavras, o NPC é provavelmente o limite do que podemos esperar que possa ser solucionado em tempo polinomial; parece um esforço demais tentar PSPACE = P (por exemplo).
fonte
Do ponto de vista de alguém que escreve código para ganhar a vida, é importante ter uma boa familiaridade com a NP-completude:
1. Reconhecer quando você está latindo na árvore errada
Os problemas NP-completos são os mais fáceis dos problemas NP-difíceis e, no entanto, até onde sabemos, leva um tempo exponencial ao tamanho da entrada para resolver esse problema de decisão. Portanto, como uma questão prática, se você puder mostrar que o problema que está tentando resolver é difícil para o NP (normalmente, mostrando que uma solução eficiente para ele também daria uma solução eficiente para algum problema completo do NP), você sabe que você pode parar de procurar um algoritmo eficiente para resolvê-lo exatamente em geral. Em vez disso, você pode selecionar entre algoritmos conhecidos que prometem boas aproximações para problemas de otimização difíceis de NP e continuar com o restante do seu projeto.
2. Encontrando a árvore certa
Como os computadores costumam ser usados para atacar problemas difíceis de NP, foram desenvolvidos solucionadores especializados que podem resolver com eficiência algumas instâncias de problemas difíceis de NP. Reconhecer que seu problema é NP-completo é o primeiro passo para encontrar uma ferramenta existente (SAT, ILP, SMT, CSP, para citar algumas) que pode ajudá-lo a encontrar soluções exatas em alguns casos em que você teria que se contentar com um problema. aproximação.
fonte
"Certamente, se encontrarmos algum algoritmo NP-hard que funcione no tempo P (esteja ou não em NP), mostramos que NP = P. Por que esse conceito é tão importante?"
Todo problema de NP se reduz a qualquer problema de NPC, mas não é verdade que todo problema de NP se reduz a qualquer problema NP-hard, portanto, provar que um algoritmo NP-hard está em P não prova P = NP. Seria o caso, no entanto, para um problema de NPC, é exatamente isso que "reduz" significa. Portanto, se encontrarmos um algoritmo P para um problema de NPC, teremos provado que P = NP.
fonte