Origens
Por que alguns problemas o computador resolve num piscar de olhos e outros levariam mais tempo do que a idade do universo? Essa é a pergunta da complexidade computacional, a área da ciência da computação que mede quão difícil é resolver um problema.
Antes dos computadores: Turing
Em 1936, antes mesmo de existirem computadores como os de hoje, o matemático Alan Turing imaginou uma máquina simples, capaz de executar qualquer cálculo passo a passo. Com ela, provou algo surpreendente: existem problemas que nenhum computador jamais vai resolver. O mais famoso é o problema da parada: não existe um programa capaz de olhar para qualquer outro programa e dizer, sempre, se ele vai terminar ou rodar para sempre. [20]
A carta de Gödel
Em 20 de março de 1956, o lógico Kurt Gödel escreveu uma carta ao matemático John von Neumann. Nela, perguntava quanto tempo uma máquina levaria para encontrar a prova de um teorema. Se fosse pouco, argumentava, o trabalho mental dos matemáticos em perguntas de sim ou não poderia ser feito por máquinas. Sem saber, Gödel tinha acabado de fazer a pergunta que hoje chamamos de P = NP. [18]
A área ganha nome
Em 1965, Juris Hartmanis e Richard Stearns publicaram um artigo que media o tempo dos algoritmos em função do tamanho do problema e deu nome à área: complexidade computacional. O trabalho rendeu aos dois o Prêmio Turing de 1993, o “Nobel da computação”. [14] [10] Na mesma época, Alan Cobham e Jack Edmonds propuseram uma regra que vale até hoje: um algoritmo é eficiente quando o seu tempo cresce como um polinômio, como n² ou n³, e não como uma exponencial, como 2ⁿ. [10]
Nasce a pergunta de 1 milhão de dólares
Em 1971, Stephen Cook mostrou que um problema de lógica chamado SAT é NP-completo, ou seja, um dos mais difíceis da classe NP. [17] Em 1972, Richard Karp mostrou que outros 21 problemas famosos eram tão difíceis quanto ele. [16] E, do outro lado da Cortina de Ferro, na União Soviética, Leonid Levin chegou à mesma ideia de forma independente, com publicação em 1973. [17] Em 2000, o Instituto Clay incluiu P versus NP entre os sete Problemas do Milênio, com um prêmio de 1 milhão de dólares para quem o resolver. [8]
Classificação
Algoritmo: uma receita de bolo
Um algoritmo é uma receita: uma lista de passos que, seguidos à risca, resolvem um problema. Para comparar receitas, os cientistas não medem o tempo no relógio, que depende de cada computador. Eles contam quantos passos a receita precisa conforme o problema cresce. O tamanho do problema se chama n: o número de itens de uma lista, de cidades num mapa ou de casas num tabuleiro.
Rápido e lento: polinomial contra exponencial
Imagine um computador que faz 1 bilhão de passos por segundo. Um algoritmo que precisa de n² passos resolve um problema com 100 itens em 10 microssegundos. Um algoritmo que precisa de 2ⁿ passos levaria 40 trilhões de anos para os mesmos 100 itens, cerca de 3 mil vezes a idade do universo. A diferença não está no computador: está na receita.
Por isso a regra de Cobham e Edmonds é tão útil: algoritmos polinomiais continuam viáveis quando o problema cresce; exponenciais, não. Nem os computadores mais rápidos compensam essa explosão.
P: fácil de resolver
A classe P reúne os problemas que um computador resolve em tempo polinomial. Ordenar uma lista de nomes, achar o caminho mais curto no GPS e até testar se um número gigante é primo estão em P. Este último só foi provado em 2002, por Manindra Agrawal e dois de seus alunos, Neeraj Kayal e Nitin Saxena. [5]
NP: fácil de verificar
A classe NP reúne os problemas em que, se alguém entregar uma resposta, você consegue conferir rapidamente se ela está certa. O Sudoku é o exemplo perfeito: resolver um tabuleiro gigante pode exigir tentativas sem fim, mas conferir um tabuleiro preenchido é só olhar linhas, colunas e quadrados.
Cuidado com uma confusão comum: NP não quer dizer “não polinomial”. Quer dizer “polinomial não determinístico”, como se o computador pudesse chutar a resposta certa e só precisasse conferi-la. Todo problema de P também está em NP: quem sabe resolver rápido também sabe conferir rápido.
NP-completo e NP-difícil
Dentro de NP estão os problemas mais difíceis de todos, os NP-completos. Eles têm uma propriedade mágica: se alguém descobrir um jeito rápido de resolver um deles, todos os problemas de NP passam a ter solução rápida. Já os NP-difíceis são pelo menos tão difíceis quanto os NP-completos, mas não precisam estar em NP: alguns nem têm resposta de sim ou não, e outros, como o problema da parada, nem sequer podem ser resolvidos.
Além de NP
Há problemas comprovadamente ainda mais difíceis. Descobrir a jogada perfeita num xadrez jogado num tabuleiro n × n, que pode crescer à vontade, exige tempo exponencial: esse problema está na classe EXP. [12] E, além de todos, estão os indecidíveis, como o problema da parada de Turing.
Seus jogos favoritos são difíceis
Os cientistas adoram provar que jogos são difíceis. Veja alguns resultados:
| Jogo | Classe | O que foi provado |
|---|---|---|
| Sudoku | NP-completo | Decidir se um tabuleiro n² × n² tem solução [15] |
| Campo Minado | NP-completo | Decidir se as pistas do tabuleiro são coerentes [7] |
| Tetris | NP-completo | Maximizar as linhas eliminadas, mesmo sabendo todas as peças que virão [9] |
| Candy Crush | NP-difícil | Atingir uma pontuação com um número fixo de jogadas [21] |
| Super Mario Bros. | NP-difícil | Decidir se dá para chegar ao fim de uma fase [6] |
| Xadrez n × n | EXP-completo | Decidir quem vence a partir de uma posição [12] |
Em todos os casos, os resultados valem para versões generalizadas, com tabuleiros ou fases de qualquer tamanho. Um Sudoku 9 × 9 comum, um computador resolve num instante.
“NP quer dizer não polinomial”
Realidade: NP significa polinomial não determinístico, ou seja, fácil de verificar.
“NP-difícil quer dizer impossível”
Realidade: quer dizer que não se conhece atalho rápido para todos os casos. Casos pequenos ou comuns costumam ser resolvidos bem.
“Um computador mais rápido resolve”
Realidade: contra um crescimento exponencial, dobrar a velocidade quase não faz diferença.
“O computador quântico resolve tudo”
Realidade: os especialistas acreditam que nem ele resolve problemas NP-completos rapidamente. [2]
Relação matemática
Polinômios contra exponenciais
Toda a teoria se apoia numa comparação entre dois tipos de função. Num polinômio, o n fica na base e o expoente é fixo; numa exponencial, o n vai para o expoente:
Polinomial: n² n³ n¹⁰ → o expoente é fixo Exponencial: 2ⁿ 3ⁿ n! → o n está no expoente (ou no fatorial) n = 10: n² = 100 2ⁿ = 1.024 n! = 3.628.800 n = 30: n² = 900 2ⁿ = 1.073.741.824 n! ≈ 2,7 × 10³²
Por maior que seja o expoente de um polinômio, uma exponencial sempre acaba passando à frente. É por isso que a fronteira entre P e o resto é tão importante.
O caixeiro viajante
Um exemplo clássico: um entregador precisa visitar várias cidades e voltar ao ponto de partida pelo caminho mais curto. Com n cidades, existem (n − 1)! ÷ 2 rotas diferentes. Com 5 cidades, são 12 rotas. Com 25, são mais de 300 sextilhões: testar todas levaria cerca de 10 milhões de anos.
Existem algoritmos mais espertos, que evitam testar tudo, mas todos os que conhecemos e que dão a resposta exata para qualquer mapa continuam exponenciais. A versão de sim ou não do problema (“existe uma rota com menos de X quilômetros?”) é NP-completa, parente próxima do ciclo hamiltoniano da lista de Karp. [16]
Reduções: o tradutor entre problemas
A ferramenta matemática mais importante da área é a redução. Reduzir o problema A ao problema B é criar um tradutor rápido que transforma qualquer pergunta de A numa pergunta de B com a mesma resposta. Se B for fácil, A também será. Foi assim que Karp mostrou, em 1972, que 21 problemas eram NP-completos: Karp os ligou em cadeia, como dominós, a partir do SAT. [16]
Por que ninguém consegue provar?
Parece que bastaria provar que algum problema NP-completo exige tempo exponencial. Mas os matemáticos descobriram que as técnicas conhecidas não dão conta disso. Há pelo menos três “barreiras” provadas: a relativização (1975), as provas naturais (1994) e a algebrização (2008). Cada uma mostra que um tipo inteiro de argumento nunca vai resolver a questão. [4] Ou seja: para resolver P versus NP, vai ser preciso inventar matemática nova.
Relação filosófica
Criar é mais difícil que reconhecer?
Pense na diferença entre compor uma música e perceber que ela é bonita, ou entre inventar uma piada e rir dela. Reconhecer parece bem mais fácil que criar. P versus NP é a versão matemática dessa intuição. O cientista da computação Scott Aaronson escreveu: [1]
“Se P = NP, o mundo seria um lugar profundamente diferente do que costumamos imaginar. Não haveria valor especial em ‘saltos criativos’, nenhuma diferença fundamental entre resolver um problema e reconhecer a solução depois de encontrada. Todos que conseguissem apreciar uma sinfonia seriam Mozart.”
Máquinas matemáticas
Gödel já tinha percebido, em 1956, que a resposta mudaria o papel dos matemáticos: se achar provas fosse tão fácil quanto conferi-las, uma máquina poderia fazer boa parte do trabalho. [18] Hoje, programas de IA já ajudam a encontrar e checar provas, mas isso não resolve a questão: eles usam atalhos que funcionam em muitos casos, não em todos.
O que conta como conhecimento
Aaronson também defende que filósofos deveriam se importar com complexidade. Saber que uma resposta existe não é o mesmo que conseguir encontrá-la num tempo razoável. Cada posição de xadrez tem uma jogada perfeita, mas ninguém, nem computador algum, consegue calculá-la sempre. Para Aaronson, a eficiência muda perguntas antigas sobre o que significa conhecer, aprender e até pensar. [3]
Uma lei da natureza?
Há quem vá além e sugira que “problemas NP-completos são difíceis” poderia ser tratado como um princípio da física, assim como “nada viaja mais rápido que a luz”. Se nenhum sistema do universo, nem mesmo quântico, consegue resolvê-los rápido, isso diria algo sobre a própria natureza. [2]
Projeção de futuro
O que os especialistas apostam
Em 2019, o cientista da computação William Gasarch repetiu uma enquete com pesquisadores da área. Das 124 respostas, cerca de 80% disseram acreditar que P ≠ NP; entre quem mais estudou o problema, 99%. E 66% acharam que a questão será resolvida antes de 2100. [13]
Se P = NP
Lance Fortnow descreve esse cenário como um mundo em que quase tudo poderia ser otimizado, de rotas de entrega a remédios e materiais, e em que computadores encontrariam provas matemáticas sozinhos. O lado sombrio: a criptografia que protege senhas, bancos e mensagens depende de problemas difíceis e ficaria vulnerável se o algoritmo fosse prático. [11]
Se P ≠ NP
É o cenário mais provável. Os problemas difíceis continuam difíceis, e isso é bom para a segurança. Para enfrentá-los na prática, usamos aproximações (uma resposta boa, não perfeita) e heurísticas (atalhos que funcionam na maioria dos casos). É assim que aplicativos de entrega montam rotas todos os dias sem esperar milhões de anos.
E os computadores quânticos?
Eles não devem mudar esse quadro. Um computador quântico consegue fatorar números grandes muito rápido, com o algoritmo de Peter Shor, de 1994, o que ameaça parte da criptografia atual. Mas fatorar não é um problema NP-completo, e os especialistas acreditam que nem os computadores quânticos resolvem problemas NP-completos rapidamente. [2] Por precaução, o NIST publicou em 2024 padrões de criptografia pós-quântica, pensados para resistir também a eles. [19]
E a inteligência artificial?
A IA é ótima para achar boas respostas para problemas difíceis, como montar horários escolares ou planejar rotas, mas faz isso com heurísticas, sem garantia de acertar sempre. Ela não muda a classe de um problema. Talvez um dia ajude os matemáticos a encontrar a prova de P ≠ NP, mas, pelas barreiras que vimos, vai ser preciso uma ideia realmente nova.
Conclusão
A complexidade computacional nasceu de uma pergunta simples: quanto esforço é preciso para resolver um problema? Ela mostrou que existem problemas fáceis, difíceis e impossíveis, e que a diferença entre polinomial e exponencial vale mais do que qualquer computador novo.
P versus NP é, ao mesmo tempo, uma questão de matemática, de tecnologia e de filosofia. A resposta pode proteger ou expor os nossos segredos, dizer se a criatividade pode ser automatizada e revelar limites da própria natureza. E ela ainda está esperando alguém para encontrá-la. Quem sabe você?
Glossário essencial
- Algoritmo
- Lista de passos que resolve um problema, como uma receita.
- Aproximação
- Algoritmo que entrega uma resposta boa, com garantia de estar perto da melhor, sem ser necessariamente perfeita.
- EXP
- Problemas que podem ser resolvidos em tempo exponencial.
- Heurística
- Atalho que costuma funcionar bem na prática, mas sem garantia para todos os casos.
- Indecidível
- Problema que nenhum computador consegue resolver, como o problema da parada.
- n
- O tamanho do problema: itens de uma lista, cidades de um mapa, casas de um tabuleiro.
- NP
- Problemas cuja resposta, quando alguém a mostra, pode ser verificada em tempo polinomial.
- NP-completo
- Os problemas mais difíceis de NP: se um tiver solução rápida, todos terão.
- NP-difícil
- Problemas pelo menos tão difíceis quanto os NP-completos, estejam ou não em NP.
- P
- Problemas que podem ser resolvidos em tempo polinomial.
- Redução
- Tradução rápida de um problema em outro, com a mesma resposta.
- SAT
- Problema de decidir se uma fórmula lógica pode ser verdadeira; o primeiro NP-completo conhecido.
- Tempo exponencial
- Número de passos que cresce como 2ⁿ ou n!; explode rapidamente.
- Tempo polinomial
- Número de passos que cresce como n², n³ ou outra potência fixa de n; considerado eficiente.
Revisão rápida
1. O que é um algoritmo?
Uma lista de passos que resolve um problema, como uma receita de bolo.
2. Qual é a diferença entre P e NP?
P reúne os problemas fáceis de resolver; NP, aqueles em que é fácil verificar uma resposta pronta.
3. NP quer dizer “não polinomial”?
Não. Quer dizer “polinomial não determinístico”: fácil de verificar.
4. Por que um computador mais rápido não resolve problemas exponenciais?
Porque cada item a mais pode dobrar o tempo. Ganhar velocidade só adia um pouco a explosão.
5. O que aconteceria se alguém resolvesse rápido um problema NP-completo?
Graças às reduções, todos os problemas de NP poderiam ser resolvidos rápido, e P seria igual a NP.
6. Com 10 cidades, quantas rotas tem o caixeiro viajante?
(10 − 1)! ÷ 2 = 181.440 rotas.
7. Por que P versus NP importa para a sua senha?
A criptografia se apoia em problemas difíceis de resolver e fáceis de verificar. Se P = NP com um algoritmo prático, ela ficaria vulnerável.
8. Quem criou a ideia de problema NP-completo?
Stephen Cook, em 1971. Leonid Levin chegou à mesma ideia na União Soviética, com publicação em 1973.
Referências
- Aaronson, S., “Reasons to believe”, setembro de 2006, Shtetl-Optimized.
- Aaronson, S., “NP-complete Problems and Physical Reality”, 2005, scottaaronson.com.
- Aaronson, S., “Why Philosophers Should Care About Computational Complexity”, agosto de 2011, arXiv:1108.1791.
- Aaronson, S.; Wigderson, A., “Algebrization: A New Barrier in Complexity Theory”, 2008, scottaaronson.com.
- Agrawal, M.; Kayal, N.; Saxena, N., “PRIMES is in P”, 2004, Annals of Mathematics 160.
- Aloupis, G.; Demaine, E. D.; Guo, A.; Viglietta, G., “Classic Nintendo Games are (Computationally) Hard”, 2014, arXiv:1203.1895.
- Ben-Ari, M., “Minesweeper as an NP-complete problem”, 2005, ACM SIGCSE Bulletin.
- Clay Mathematics Institute, “P vs NP”, claymath.org.
- Demaine, E. D.; Hohenberger, S.; Liben-Nowell, D., “Tetris is Hard, Even to Approximate”, 2003, csail.mit.edu.
- Fortnow, L.; Homer, S., “A Short History of Computational Complexity”, 2003, lance.fortnow.com.
- Fortnow, L., “The Golden Ticket: P, NP, and the Search for the Impossible”, abril de 2013, Princeton University Press.
- Fraenkel, A. S.; Lichtenstein, D., “Computing a perfect strategy for n × n chess requires time exponential in n”, 1981, Journal of Combinatorial Theory A 31.
- Gasarch, W.; Fortnow, L., “Third Poll on P vs NP and related Questions is out now!”, março de 2019, Computational Complexity blog.
- Hartmanis, J.; Stearns, R. E., “On the computational complexity of algorithms”, 1965, Transactions of the AMS 117.
- Kendall, G.; Parkes, A.; Spoerer, K., “A Survey of NP-Complete Puzzles”, 2008, ICGA Journal.
- Wikipedia, “Karp’s 21 NP-complete problems”, en.wikipedia.org.
- Wikipedia, “Cook–Levin theorem”, en.wikipedia.org.
- Lipton, R. J., “The Gödel Letter”, rjlipton.com.
- NIST, “Post-Quantum Cryptography FIPS Approved”, agosto de 2024, csrc.nist.gov.
- Stanford Encyclopedia of Philosophy, “Turing Machines”, plato.stanford.edu.
- Walsh, T., “Candy Crush is NP-hard”, março de 2014, arXiv:1403.1911.