Nota: Ainda não verifiquei a resposta com cuidado e faltam partes a serem escritas, considere-a um primeiro rascunho.
Essa resposta é direcionada principalmente para pessoas que não são pesquisadores da teoria da complexidade ou de campos relacionados. Se você é um teórico da complexidade e leu a resposta, entre em contato se notar algum problema ou tiver alguma idéia para melhorar a resposta.
Onde você pode encontrar soluções reivindicadas de P vs. NP
- Há a página P-versus-NP, que possui uma lista de tais reivindicações.
- Os artigos que alegam resolver a questão são publicados regularmente no arXiv .
Outras listas de como não resolver P vs. NP
Lance Fortnow, então você pensa que se estabeleceu P verus NP , 2009
Scott Aaronson, Oito sinais de que uma prova de P ≠ NP está errada , 2010
Página Polymath para o artigo de Deolalikar , onde a seção de leituras adicionais possui uma boa lista de referências sobre o problema.
Como não abordar P vs. NP
Deixe-me discutir "como não abordar P vs. NP" não no sentido de idéias que não funcionarão, mas em um sentido mais geral. P vs. NP é um problema fácil de declarar (veja também minha resposta aqui ):
NP = P: Para todo problema de decisão com um algoritmo de verificação de tempo polinomial, existe um algoritmo de tempo polinomial.
ou equivalente
Existe um algoritmo de tempo polinomial para SAT.
O SAT pode ser substituído por qualquer outro problema NP-completo .
.
Muitas vezes, as pessoas simplificam demais e exageram a filosofia e exageram a importância prática do problema (como afirmado acima). Tais declarações costumam dar intuição, mas não substituem de maneira alguma a declaração matemática real do problema.
Eficiência teórica não é o mesmo que viabilidade na prática.
Deixe-me primeiro com consequências práticas exageradas.
I. É possível que P = NP, mas não ajude por nenhum problema na prática!
2264n65536+22128
≠
nlg∗lg∗n
lg∗n>62
O ponto principal aqui é que P é um modelo simples abstrato de computação eficiente, a complexidade do pior caso é um modelo simples abstrato de estimativa do custo de uma computação etc. Tudo isso são abstrações, mas ninguém na prática consideraria um algoritmo como o descrito em (I) acima como um algoritmo eficiente, na verdade. P é um bom modelo abstrato, possui boas propriedades, facilita as questões técnicas e é útil. No entanto, como toda abstração matemática, oculta detalhes com os quais, na prática, podemos nos importar. Existem vários modelos mais refinados, mas quanto mais complicado o modelo se torna, menos agradável seria discutir.
O que as pessoas se preocupam na prática é calcular uma resposta para o problema nos casos em que se preocupam em usar uma quantidade razoável de recursos. Existem tarefas dependentes e devem ser levadas em consideração.
Tentar encontrar melhores algoritmos para instâncias práticas de problemas difíceis de NP é um esforço interessante e digno. Existem algoritmos heurísticos do SAT-solver que são usados na indústria e podem resolver instâncias práticas do SAT com milhões de variáveis. Existe até uma competição internacional SAT .
(Mas também existem pequenas instâncias concretas em que todos esses algoritmos falham e falham bastante, podemos realmente provar que todos os solucionadores modernos de SAT de última geração levam tempo exponencial para resolver instâncias simples como o Princípio Pigeonhole proposicional .)
Lembre-se de que a correção e o tempo de execução dos programas não podem ser obtidos apenas com a execução do programa nas instâncias . Não importa quantas instâncias você tente, nenhuma quantidade é suficiente. Existem inúmeras entradas possíveis e você precisa mostrar correção e eficiência (ou seja, o tempo de execução é polinomial) do programa para todas elas. Em resumo, você precisa de provas matemáticas de correção e eficiência. Se você não sabe o que é uma prova matemática, deve primeiro aprender matemática básica (leia um livro didático de matemática / combinatória / teoria de gráficos, este é um bom tópico para aprender sobre o que é considerado uma prova matemática).
Também tenha cuidado com outras afirmações sobre P vs. NP e a conseqüência de suas respostas. Tais alegações são frequentemente baseadas em simplificações semelhantes.
Os teóricos da complexidade realmente não se preocupam com uma resposta para P vs. NP!
Eu exagerei um pouco. É claro que nos preocupamos com uma resposta para P vs. NP. Mas nos preocupamos com isso em um contexto. P vs. NP é o nosso principal problema, mas não é o objetivo final. É um problema fácil de declarar, envolve muitas idéias fundamentais, é útil para explicar o tipo de perguntas em que estamos interessados para pessoas que não estão familiarizadas com o tópico. Mas não buscamos uma resposta Sim / Não para a pergunta.
Buscamos uma melhor compreensão da natureza da computação eficiente . Acreditamos que resolver a questão virá com esse entendimento e essa é a verdadeira razão pela qual nos preocupamos. Faz parte de um enorme corpo de pesquisa. Se você quiser provar o que fazemos, consulte um bom livro de teoria da complexidade, por exemplo, " Teoria da complexidade: uma abordagem moderna " , de Arora e Barak ( versão preliminar ).
≠
Em resumo, da perspectiva de um teórico da complexidade
P vs. NP não é um quebra-cabeça com resposta Sim / Não. Buscamos uma resposta para P vs. NP porque achamos que ele compreenderá melhor a natureza da computação eficiente. Uma resposta sem um grande avanço em nosso entendimento não é muito interessante.
Houve muitas ocasiões em que não especialistas reivindicaram soluções para P vs. NP, e essas alegações geralmente sofrem com problemas que não teriam sido feitos se acabassem de ler um livro padrão sobre teoria da complexidade.
Problemas comuns P = NP
As reivindicações de P = NP parecem ser mais comuns. Eu acho que o seguinte é o tipo mais comum. Alguém tem uma idéia e escreve um programa e o testa em algumas instâncias, pensa que é hora polinomial e resolve corretamente um problema completo de NP. Como expliquei acima, nenhuma quantidade de testes mostrará P = NP. P = NP precisa de uma prova matemática , não apenas de um programa que parece resolver um problema de NP completo em tempo polinomial.
Essas tentativas geralmente sofrem de um dos dois problemas:
I. o algoritmo não é realmente um tempo polinomial.
II o algoritmo não resolve todas as instâncias corretamente.
≠
[a ser escrito]
Como verificar se seu algoritmo realmente não funciona
Você não pode mostrar que seu algoritmo funciona corretamente testando. Mas você pode mostrar que não funciona corretamente testando! Então, aqui está como você pode garantir que seu algoritmo não esteja correto se você estiver disposto a fazer algum trabalho.
Primeiro, escreva um programa para converter instâncias do SAT (no formato CNF padrão) no problema difícil de NP que você está solucionando. O SAT é um dos problemas mais difíceis de NP estudados e a redução de outros problemas para o SAT é geralmente fácil. Segundo, pegue os exemplos com os quais os solucionadores de SAT de ponta enfrentam (por exemplo, pegue os exemplos da competição por SAT) e alimente-os com seu algoritmo e veja como ele funciona. Experimente instâncias concretas conhecidas como o Princípio Pigeonhole proposicional (e não trapaceie codificando-as como casos especiais), instâncias criptográficas (como RSA Factoring Challenges ), instâncias aleatórias de k-SAT próximas ao limite etc.
10n2
Como verificar sua ideia algorítmica P = NP não pode funcionar
Se você fizer isso, terá certeza de que seu algoritmo não funciona (se funcionar melhor do que os solucionadores SAT de última geração, concorra na próxima competição e muitas pessoas estariam interessadas em estudar seu algoritmo e suas idéias).
Agora você sabe que realmente não funciona, mas isso não é suficiente. Você quer saber por quê,
é a razão pela qual meu algoritmo não funciona em um pequeno problema que pode ser corrigido ou há uma razão fundamental para que ele não funcione?
Às vezes, o problema com o algoritmo é simples e é possível identificar o que estava errado conceitualmente. O melhor resultado é que você entende o motivo pelo qual sua ideia não pode funcionar. Freqüentemente não é o caso, sua ideia não funciona, mas você não consegue descobrir o porquê. Nesse caso, lembre-se:
entender por que alguma idéia não pode funcionar pode ser mais difícil do que resolver P vs. NP!
Se você puder formalizar sua ideia o suficiente, poderá provar as limitações de idéias específicas (por exemplo, existem resultados que dizem que formalizações específicas do algoritmo ganancioso não podem resolver problemas completos de NP). No entanto, é ainda mais difícil e você não tem muita chance se não leu um livro de teoria da complexidade padrão.
Em algum momento, nem sequer existe uma idéia conceitual clara do motivo pelo qual o algoritmo deve funcionar, ou seja, é baseado em algumas heurísticas não bem compreendidas . Se você não tem uma idéia conceitual clara de por que seu algoritmo deve funcionar, talvez não tenha muita chance de entender por que ele não funciona!
≠
≠
Questão 1: o autor não conhece a definição de P e NP, ou pior ainda, não entende o que é uma prova matemática. Como o autor não possui treinamento matemático básico, ele não entende quando lhe dizem que o que ele está apresentando não é uma prova (por exemplo, as etapas não seguem as anteriores).
Questão 2: o autor confunde "não sabemos como" com "impossibilidade matemática". Por exemplo, eles fazem várias suposições injustificadas e, quando perguntados "por que essa afirmação é verdadeira?" eles respondem "como isso pode ser falso?". Um comum é supor que qualquer programa que resolva o problema precise executar etapas específicas, por exemplo, ele deve calcular valores intermediários específicos, porque ele não consegue pensar em uma maneira alternativa de resolver o problema.
[a ser concluído]
≠
[a ser escrito]
≠
Se uma reclamação não sofrer desses problemas básicos, rejeitá-la se tornará mais difícil. No primeiro nível, pode-se encontrar uma etapa incorreta no argumento. A resposta típica do autor é que eu posso consertar e isso pode continuar. Semelhante às soluções P = NP, muitas vezes é muito difícil encontrar um problema fundamental com uma ideia que possa mostrar que ela não funciona, principalmente quando a ideia em si é informal.
≠