P vs NP: um dos problemas do milênio

Por Caio Novais, Luan Pinheiro e Lucas Alves

O problema P vs NP é uma das questões mais notáveis e desafiadoras da teoria da computação e da matemática, sendo um dos sete problemas do milênio estabelecidos pelo Instituto de Matemática Clay (CMI). Ao longo das décadas, ele tem cativado a mente de matemáticos, cientistas da computação e entusiastas da ciência, tornando-se um dos enigmas mais célebres e ainda não resolvidos na comunidade acadêmica. O CMI oferece um prêmio de um milhão de dólares para qualquer pessoa que possa demonstrar, de forma definitiva, se P é igual a NP ou não, assim como para os outros seis problemas do milênio. A resolução de qualquer um destes problemas não apenas teria implicações profundas para seus campos de estudo correspondentes, mas também lançaria luz sobre questões fundamentais na matemática e na ciência. Neste contexto, o texto explorará o enigma P vs NP, seu significado e a busca contínua por uma solução que poderia redefinir o cenário tecnológico e científico.

O que é P e NP?

P e NP são duas classes de complexidade computacional que desempenham um papel fundamental na teoria da computação e na resolução de problemas algorítmicos.

A classe P é composta por problemas de decisão que podem ser resolvidos eficientemente por um algoritmo em tempo polinomial, o que significa que o tempo necessário para resolvê-los cresce no máximo como uma função polinomial do tamanho da entrada. Problemas em P são considerados “fáceis” de resolver.

Por outro lado, a classe NP é composta por problemas de decisão para os quais, dada uma solução candidata, é possível verificar em tempo polinomial se a solução é correta. Isso implica que problemas em NP são “fáceis” de verificar, mas a questão de se são igualmente “fáceis” de resolver ainda está em aberto. A hipótese predominante é que P é diferente de NP, sugerindo que resolver um problema em NP pode ser mais difícil do que verificar a solução, embora essa afirmação não seja categoricamente afirmada.

Dentro da classe NP, existem dois conceitos adicionais que são fundamentais:

  1. NP-difícil (NP-hard): Um problema é NP-difícil se todos os problemas em NP podem ser reduzidos a ele em tempo polinomial. Isso significa que se você encontrar um algoritmo eficiente para resolver um problema NP-difícil, você também terá um algoritmo eficiente para resolver todos os problemas em NP, o que implicaria que P é igual a NP. O Problema da decisão da soma de subconjuntos e o Problema da parada são exemplos de problemas NP-difícil.
  2. NP-completo (NP-complete): Um problema é NP-completo se ele é tanto NP como NP-difícil. Em outras palavras, um problema NP-completo é um problema em NP para o qual se pode mostrar que todos os problemas em NP podem ser reduzidos a ele em tempo polinomial. Resolver qualquer problema NP-completo eficientemente implicaria em resolver eficientemente todos os problemas em NP e, portanto, P seria igual a NP. Exemplos de problemas NP-completos são: o Problema do Caixeiro Viajante, Problema da mochila, Problema do ciclo hamiltoniano, Problema da Torre de Hanói, entre outros.

A classe P é uma subclasse da classe NP. Isso significa que todos os problemas que podem ser resolvidos eficientemente em tempo polinomial (ou seja, pertencem à classe P) também podem ser resolvidos em tempo polinomial se considerarmos a classe NP.

Para entender isso, considere que se um problema está em P, significa que já temos um algoritmo eficiente para resolvê-lo, e esse algoritmo funciona em tempo polinomial para todas as entradas possíveis. Uma vez que um problema em P é resolvido em tempo polinomial, ele também pode ser verificado em tempo polinomial. Portanto, ele naturalmente pertence à classe NP, uma vez que problemas em NP são aqueles que podem ser verificados em tempo polinomial.

Em resumo, a inclusão de P em NP implica que qualquer problema em P é automaticamente um problema em NP, mas nem todos os problemas em NP são necessariamente resolúveis em tempo polinomial. Essa relação hierárquica entre P e NP é um dos elementos-chave na discussão sobre o problema P vs NP. A questão central é se existe algum problema em NP que não está em P, ou seja, se há problemas intrinsecamente difíceis de resolver de forma eficiente, como é sugerido pela hipótese de que P é diferente de NP.

Por fim, o problema P vs NP representa um dos desafios mais significativos e emblemáticos da teoria da computação e matemática. A resolução deste enigma não apenas teria implicações profundas nas áreas de computação e matemática, mas também poderia redefinir o cenário tecnológico, tornando a busca por uma solução uma empreitada desafiadora e de grande importância para a comunidade acadêmica.

Referências

COOK, S. The P versus NP Problem 1. Statement of the Problem. [s.l: s.n.]. Disponível em: <http://www.cs.utoronto.ca/~toni/Courses/Complexity/handouts/cook-clay.pdf>. Acesso em: 27 jul. 2023.

WIGDERSON, A.; SMALE, S. P, N P and mathematics -a computational complexity perspective “P versus N P -a gift to mathematics from computer science”. [s.l: s.n.]. Disponível em: <https://www.math.ias.edu/~avi/PUBLICATIONS/MYPAPERS/W06/w06.pdf>.

The Millennium Prize Problems. Disponível em: <https://www.claymath.org/millennium-problems/>.

COOK, S. The importance of the P versus NP question. Journal of the ACM, v. 50, n. 1, p. 27–29, 1 jan. 2003.