Quais são as diferenças entre NP, NP-Complete e NP-Hard?

1107

Quais são as diferenças entre NP , NP-Complete e NP-Hard ?

Estou ciente de muitos recursos em toda a web. Gostaria de ler suas explicações, e o motivo é que elas podem ser diferentes do que está lá fora, ou há algo que eu não conheço.

DarthVader
fonte

Respostas:

1438

Suponho que você esteja procurando definições intuitivas, já que as definições técnicas requerem algum tempo para serem entendidas. Antes de tudo, vamos lembrar de um conceito preliminar necessário para entender essas definições.

  • Problema de decisão : um problema com uma resposta sim ou não .

Agora, vamos definir essas classes de complexidade .

P

P é uma classe de complexidade que representa o conjunto de todos os problemas de decisão que podem ser resolvidos em tempo polinomial .

Ou seja, dada uma instância do problema, a resposta sim ou não pode ser decidida em tempo polinomial.

Exemplo

Dado um gráfico conectado G, seus vértices podem ser coloridos usando duas cores para que nenhuma aresta seja monocromática?

Algoritmo: comece com um vértice arbitrário, pinte de vermelho e todos os seus vizinhos de azul e continue. Pare quando você ficar sem vértices ou forçado a criar uma aresta com os dois pontos de extremidade da mesma cor.


NP

NP é uma classe de complexidade que representa o conjunto de todos os problemas de decisão para os quais as instâncias em que a resposta é "sim" têm provas que podem ser verificadas em tempo polinomial.

Isso significa que, se alguém nos fornecer uma instância do problema e um certificado (às vezes chamado de testemunha), com a resposta afirmativa, podemos verificar se está correto em tempo polinomial.

Exemplo

A fatoração de número inteiro está em NP. Esse é o problema que forneceu números inteiros ne m, existe um número inteiro fcom 1 < f < mtal que fdivide n( fé um fator pequeno de n)?

Este é um problema de decisão porque as respostas são sim ou não. Se alguém nos fornecer uma instância do problema (para entregar números inteiros ne m) e um número inteiro fcom 1 < f < m, e alegar que esse fé um fator de n(o certificado), podemos verificar a resposta em tempo polinomial executando a divisão n / f.


NP-Complete

NP-Complete é uma classe de complexidade que representa o conjunto de todos os problemas Xem NP para o qual é possível reduzir qualquer outro problema NP Ypara Xem tempo polinomial.

Intuitivamente, isso significa que podemos resolver Yrapidamente se soubermos resolver Xrapidamente. Precisamente, Yé redutível a X, se houver um algoritmo de tempo polinomial fpara transformar instâncias yde Yem instâncias x = f(y)de Xem tempo polinomial, com a propriedade que a resposta yé sim, se e somente se a resposta f(y)for sim.

Exemplo

3-SAT. Este é o problema em que nos é dada uma conjunção (ANDs) de disjunções de 3 cláusulas (ORs), declarações do formulário

(x_v11 OR x_v21 OR x_v31) AND 
(x_v12 OR x_v22 OR x_v32) AND 
...                       AND 
(x_v1n OR x_v2n OR x_v3n)

onde cada x_vijuma é uma variável booleana ou a negação de uma variável de uma lista predefinida finita (x_1, x_2, ... x_n).

Pode ser demonstrado que todo problema de NP pode ser reduzido para 3-SAT . A prova disso é técnica e requer o uso da definição técnica de NP ( baseada em máquinas de Turing não determinísticas ). Isso é conhecido como teorema de Cook .

O que torna os problemas de NP completos importantes é que, se um algoritmo de tempo polinomial determinístico pode ser encontrado para resolver um deles, todo problema de NP é solucionável em tempo polinomial (um problema para governar todos eles).


NP-hard

Intuitivamente, esses são os problemas que são pelo menos tão difíceis quanto os problemas completos do NP . Observe que problemas difíceis de NP não precisam estar no NP e não precisam ter problemas de decisão .

A definição precisa aqui é que um problema Xé NP-difícil, se houver um problema NP-completo Y, tal queY seja redutível Xem tempo polinomial .

Porém, como qualquer problema completo de NP pode ser reduzido a qualquer outro problema completo de NP em tempo polinomial, todos os problemas completos de NP podem ser reduzidos a qualquer problema difícil de NP em tempo polinomial. Então, se houver uma solução para um problema difícil de NP em tempo polinomial, haverá uma solução para todos os problemas de NP em tempo polinomial.

Exemplo

O problema de parada é um problema difícil de NP. Esse é o problema que, dado um programa Pe informações I, ele será interrompido? Este é um problema de decisão, mas não está no NP. É claro que qualquer problema de NP-completo pode ser reduzido a esse. Como outro exemplo, qualquer problema de NP-completo é NP-difícil.

Meu problema NP-completo favorito é o problema do Campo Minado .


P = NP

Esse é o problema mais famoso da ciência da computação e uma das questões mais importantes em destaque nas ciências matemáticas. De fato, o Clay Institute está oferecendo um milhão de dólares para uma solução para o problema (a redação de Stephen Cook no site da Clay é bastante boa).

É claro que P é um subconjunto de NP. A questão em aberto é se os problemas de NP têm ou não soluções de tempo polinomial determinísticas. Acredita-se amplamente que não. Aqui está um excelente artigo recente sobre o mais recente (e a importância) do problema P = NP: O status do problema P versus NP .

O melhor livro sobre o assunto é Computers and Intratability de Garey e Johnson.

Jason
fonte
32
@ Paul Fisher: vou mostrar que o SAT é redutível ao problema de parada no tempo polinomial. Considere o seguinte algoritmo: dada como entrada uma proposição Isobre nvariáveis, tente todas 2^nas atribuições possíveis para as variáveis ​​e pare se alguém satisfizer a proposição e, caso contrário, insira um loop infinito. Vemos que esse algoritmo interrompe se e somente se Ié satisfatório. Assim, se tivéssemos um algoritmo de tempo polinomial para resolver o problema de parada, poderíamos resolver o SAT em tempo polinomial. Portanto, o problema de parada é difícil de NP.
jason
6
@ Jason - Você não pode reduzir um problema decidível a um problema indecidível dessa maneira. Problemas decididos devem resultar em uma resposta definitiva de sim ou não para serem considerados decidíveis. O problema da parada não tem uma resposta sim definitiva ou agora, pois uma resposta arbitrária pode lançar qualquer solução em um loop.
Rjzii 13/12/2009
11
@ Rob: Sim, eu posso. A definição de redutível não exige que o problema que está sendo reduzido seja solucionável. Isso é verdade tanto para reduções de um quanto para reduções de Turing.
jason
5
@ Rob: Bem, tudo bem, se você quiser continuar com isso. Primeiro, "Decidível" não é sinônimo de "problema de decisão", como você o usou. "Decidível" significa, grosso modo, que existe um "método eficaz" para determinar a resposta. "Método eficaz", é claro, tem uma definição técnica. Além disso, "decidível" também pode ser definido em termos de "funções computáveis". Portanto, o problema da parada é um problema de decisão ("Este programa pára?" É uma pergunta de sim / não), mas é indecidível; não existe um método eficaz para determinar se uma instância do problema de parada será interrompida.
jason
21
O uso do problema Halting como um "exemplo clássico" do problema NP-hard está incorreto. É como dizer: "O Oceano Pacífico é um exemplo clássico de um aquário de água salgada".
Michael
261

Eu estive olhando ao redor e vendo muitas explicações longas. Aqui está um pequeno gráfico que pode ser útil para resumir:

Observe como a dificuldade aumenta de cima para baixo: qualquer NP pode ser reduzido a NP-Complete e qualquer NP-Complete pode ser reduzido a NP-Hard , tudo em tempo P (polinomial).

Se você puder resolver uma classe de problema mais difícil no tempo P, isso significa que você descobriu como resolver todos os problemas mais fáceis no tempo P (por exemplo, provar P = NP, se você descobrir como resolver qualquer problema NP-Completo em P time).

____________________________________________________________
| Tipo de problema | Verificável em tempo P | Solúvel em tempo P | Dificuldade crescente
___________________________________________________________ | |
| P Sim Sim |
| NP Sim Sim ou não * | |
| NP-Completo | Sim Desconhecido |
| NP-Hard | Sim ou não ** | Desconhecido *** | |
____________________________________________________________ V

Notas Yesou Noentradas:

  • * Um problema NP que também é P é solucionável no tempo P.
  • ** Um problema NP-Hard que também é NP-Complete é verificável em tempo P.
  • *** NP-Complete problemas (todos os quais formam um subconjunto de NP-hard) podem ser. O resto do NP difícil não é.

Também achei esse diagrama bastante útil para ver como todos esses tipos se correspondem (preste mais atenção à metade esquerda do diagrama).

Johnson Wong
fonte
Tenho uma dúvida relacionada à sua resposta. Eu o fiz em uma pergunta separada, mas fui convidado a publicá-lo aqui. Pode me ajudar aqui? stackoverflow.com/questions/21005651/…
Srikanth
Não se sabe se os problemas de NP completos são solucionáveis ​​em tempo polinomial. Além disso, os problemas de NP completo são difíceis de NP, portanto, alguns problemas difíceis de NP são verificáveis ​​em tempo polinomial e possíveis, alguns também solucionáveis ​​em tempo polinomial.
Falk Hüffner
Esta tabela é incorreta e auto-contraditória. Mesmo se você assumir que NP! = P, que ainda não foi provado, ele ainda estará incorreto. Por exemplo, a classe NP-Hard inclui problemas NP-Complete; portanto, sua tabela afirma que os problemas do NP-Complete são verificáveis ​​simultaneamente no tempo polinomial e não verificáveis ​​no tempo polinomial.
Michael
3
@ FalkHüffner Obrigado, a tabela foi atualizada (houve um erro na tradução do diagrama de Venn).
Johnson Wong
1
@PeterRaeves Todos os problemas de NP-completo são difíceis de NP, por definição: NP-completo = (NP e NP-rígido). O inverso não é verdadeiro: existem problemas (como o Problema de Parada) no NP-hard que não estão no NP-complete. "NP (não solucionável em tempo polinomial)" - não é isso que NP significa. NP é "polinomial não determinístico". Todos os problemas em P também estão em NP. Se o inverso é verdadeiro é notoriamente desconhecido.
Jim Balter
73

Esta é uma resposta muito informal à pergunta feita.

3233 pode ser escrito como o produto de dois outros números maiores que 1? Existe alguma maneira de percorrer um caminho em torno de todas as Sete Pontes de Königsberg sem tomar nenhuma ponte duas vezes? Estes são exemplos de perguntas que compartilham uma característica comum. Pode não ser óbvio como determinar com eficiência a resposta, mas se a resposta for sim, haverá uma prova curta e rápida de verificação. No primeiro caso, uma fatoração não trivial de 51; no segundo, uma rota para caminhar pelas pontes (ajustando as restrições).

Um problema de decisão é uma coleção de perguntas com respostas sim ou não que variam apenas em um parâmetro. Diga o problema COMPOSITE = {"É ncomposto": né um número inteiro} ou EULERPATH = {"O gráfico Gpossui um caminho de Euler?": GÉ um gráfico finito}.

Agora, alguns problemas de decisão se prestam a algoritmos eficientes, se não óbvios. Euler descobriu um algoritmo eficiente para problemas como as "Sete Pontes de Königsberg", mais de 250 anos atrás.

Por outro lado, para muitos problemas de decisão, não é óbvio como obter a resposta - mas se você souber alguma informação adicional, é óbvio como provar que tem a resposta certa. COMPOSITE é assim: a divisão de teste é o algoritmo óbvio e é lento: para fatorar um número de 10 dígitos, você deve tentar algo como 100.000 divisores possíveis. Mas se, por exemplo, alguém lhe disser que 61 é um divisor de 3233, a divisão longa simples é uma maneira eficiente de verificar se estão corretas.

A classe de complexidade NP é a classe de problemas de decisão em que as respostas "sim" têm um estado curto, rápido para verificar as provas. Como COMPOSTO. Um ponto importante é que essa definição não diz nada sobre a dificuldade do problema. Se você tiver uma maneira correta e eficiente de resolver um problema de decisão, basta escrever as etapas da solução.

A pesquisa de algoritmos continua e novos algoritmos inteligentes são criados o tempo todo. Um problema que talvez você não saiba como resolver com eficiência hoje pode ter uma solução eficiente (se não óbvia) amanhã. De fato, foram necessários pesquisadores até 2002 para encontrar uma solução eficiente para o COMPOSITE! Com todos esses avanços, é preciso se perguntar: será que ter provas curtas é apenas uma ilusão? Talvez todo problema de decisão que se presta a provas eficientes tenha uma solução eficiente? Ninguém sabe .

Talvez a maior contribuição para esse campo tenha sido a descoberta de uma classe peculiar de problemas de PN. Ao brincar com os modelos de circuito para computação, Stephen Cook encontrou um problema de decisão da variedade NP que era provavelmente tão difícil ou mais difícil do que qualquer outro problema NP. Uma solução eficiente para o problema de satisfação booleana pode ser usada para criar uma solução eficiente para qualquer outro problema no NP. Logo depois, Richard Karp mostrou que vários outros problemas de decisão poderiam servir ao mesmo propósito. Esses problemas, em certo sentido os problemas "mais difíceis" do NP, ficaram conhecidos como problemas completos do NP .

Obviamente, NP é apenas uma classe de problemas de decisão. Muitos problemas não são declarados naturalmente desta maneira: "encontre os fatores de N", "encontre o caminho mais curto no gráfico G que visita todos os vértices", "forneça um conjunto de atribuições de variáveis ​​que tornam verdadeira a seguinte expressão booleana". Embora se possa falar informalmente sobre alguns desses problemas estarem "em NP", tecnicamente isso não faz muito sentido - eles não são problemas de decisão. Alguns desses problemas podem até ter o mesmo tipo de poder que um problema completo de NP: uma solução eficiente para esses problemas (sem decisão) levaria diretamente a uma solução eficiente para qualquer problema de NP. Um problema como esse é chamado de NP-hard .

Managu
fonte
67

P (Tempo Polinomial): Como o próprio nome sugere, estes são os problemas que podem ser resolvidos no tempo polinomial.

NP (Tempo não determinístico-polinomial): Estes são os problemas de decisão que podem ser verificados no tempo polinomial. Isso significa que, se eu afirmar que existe uma solução de tempo polinomial para um problema específico, você me pede para provar isso. Então, darei a você uma prova que você pode verificar facilmente em tempo polinomial. Esses tipos de problemas são chamados de problemas de NP. Observe que, aqui não estamos falando sobre se existe ou não uma solução de tempo polinomial para esse problema. Mas estamos falando em verificar a solução para um determinado problema em tempo polinomial.

NP-Hard: Estes são pelo menos tão difíceis quanto os problemas mais difíceis no NP. Se pudermos resolver esses problemas em tempo polinomial, podemos resolver qualquer problema de NP que possa existir. Observe que esses problemas não são necessariamente problemas NP. Isso significa que podemos ou não verificar a solução para esses problemas em tempo polinomial.

NP-Complete: Estes são os problemas NP e NP-Hard. Isso significa que, se pudermos resolver esses problemas, podemos resolver qualquer outro problema de PN e as soluções para esses problemas poderão ser verificadas em tempo polinomial.

Nagakishore Sidde
fonte
Então você decidiu copiar as definições de algum lugar?
Arun Satyarth
1
A resposta faz sentido!
Konstantin
2
@ArunSatyarth De onde?
significado-importa
3
A melhor resposta, pois é curta, usa terminologia suficiente, possui frases humanas normais (não é difícil ler o que se deve ser o mais correto possível) e, surpreendentemente, é a única resposta que escreve o que N significa.
significado-importa
62

Além das outras ótimas respostas, aqui está o esquema típico que as pessoas usam para mostrar a diferença entre NP, NP-Complete e NP-Hard:

insira a descrição da imagem aqui

Franck Dernoncourt
fonte
1
Está provado que existe um problema no NP-Hard que não está no NP-Complete? Porque esta imagem sugere isso. Obrigado.
Hilder Vitor Lima Pereira
9
@VitorLima sim, por exemplo , problemas com o EXPSPACE completo são difíceis de NP, mas comprovadamente não são completos.
Franck Dernoncourt 4/12/2014
2
Ok, obrigada. Eu encontrei algumas referências falando sobre isso. Por exemplo, este: princeton.edu/~achaney/tmve/wiki100k/docs/NP-hard.html
Hilder Vitor Lima Pereira
47

A maneira mais fácil de explicar P v. NP e outras coisas sem entrar em detalhes técnicos é comparar "problemas de palavras" com "problemas de múltipla escolha".

Quando você está tentando resolver um "problema de palavras", precisa encontrar a solução do zero. Quando você está tentando resolver um "problema de múltipla escolha", tem uma opção: resolva-o como faria com um "problema de palavras" ou tente inserir cada uma das respostas que lhe foram dadas e escolha a resposta que melhor se encaixa.

Muitas vezes acontece que um "problema de múltipla escolha" é muito mais fácil do que o correspondente "problema de palavras": substituir as respostas do candidato e verificar se elas se encaixam podem exigir um esforço significativamente menor do que encontrar a resposta certa do zero.

Agora, se concordarmos com o esforço que leva tempo polinomial "fácil", a classe P consistiria em "problemas fáceis de palavras" e a classe NP consistiria em "problemas fáceis de múltipla escolha".

A essência de P v. NP é a pergunta: "Existem problemas fáceis de múltipla escolha que não são fáceis como problemas de palavras"? Ou seja, existem problemas para os quais é fácil verificar a validade de uma resposta dada, mas é difícil encontrá-la do zero?

Agora que entendemos intuitivamente o que é NP, precisamos desafiar nossa intuição. Acontece que existem "problemas de múltipla escolha" que, em certo sentido, são os mais difíceis de todos: se alguém encontrasse uma solução para um desses problemas "mais difíceis de todos", seria capaz de encontrar uma solução para TODOS. Problemas de NP! Quando Cook descobriu isso há 40 anos, foi uma surpresa completa. Esses problemas "mais difíceis de todos" são conhecidos como NP-hard. Se você encontrar uma "solução de problemas de palavras" para um deles, automaticamente encontrará uma "solução de problemas de palavras" para cada um dos "problemas fáceis de múltipla escolha"!

Finalmente, problemas NP-completos são aqueles que são simultaneamente NP e NP-difíceis. Seguindo nossa analogia, eles são simultaneamente "fáceis como problemas de múltipla escolha" e "os mais difíceis de todos como problemas de palavras".

Michael
fonte
18

Problemas NP-completos são aqueles NP-Hard e na classe de complexidade NP. Portanto, para mostrar que qualquer problema específico é NP-completo, você precisa mostrar que o problema está no NP e é difícil no NP.

Os problemas que estão na classe de complexidade do NP podem ser resolvidos de maneira não determinística no tempo polinomial e uma possível solução (isto é, um certificado) para um problema no NP pode ser verificada quanto à correção no tempo polinomial.

Um exemplo de solução não determinística para o problema do k-clique seria algo como:

1) selecione aleatoriamente k nós em um gráfico

2) verifique se esses nós k formam um clique.

A estratégia acima é polinomial no tamanho do gráfico de entrada e, portanto, o problema do k-clique está no NP.

Observe que todos os problemas deterministicamente solucionáveis ​​no tempo polinomial também estão no NP.

Mostrar que um problema é difícil de NP geralmente envolve uma redução de algum outro problema difícil de NP para o seu problema usando um mapeamento de tempo polinomial: http://en.wikipedia.org/wiki/Reduction_(complexity)

awesomo
fonte
Não que eu veja algo nesta resposta que esteja incorreto, mas não sei por que foi aceito. Realmente não oferece muito o que o OP estava pedindo. Não é realmente diferente das explicações padrão desses problemas, e não há explicações claras sobre o que causa esses problemas nessas classes. Não vale a pena um voto negativo, mas certamente não vale a pena responder a aceitação.
7119 San Jacinto
18

Acho que podemos responder de forma muito mais sucinta. Respondi a uma pergunta relacionada e copiei minha resposta de lá

Mas primeiro, um problema difícil de NP é um problema para o qual não podemos provar que existe uma solução de tempo polinomial. A dureza NP de algum "problema-P" geralmente é comprovada pela conversão de um problema já difícil de NP já comprovado em "problema-P" em tempo polinomial.

Para responder ao restante da pergunta, primeiro você precisa entender quais problemas difíceis de NP também estão completos. Se um problema difícil de NP pertencer ao conjunto de NP, ele estará completo. Para pertencer ao conjunto NP, é necessário um problema

(i) um problema de decisão,
(ii) o número de soluções para o problema deve ser finito e cada solução deve ter comprimento polinomial; e
(iii) dada uma solução de comprimento polinomial, poderemos dizer se a resposta para a problema é sim / não

Agora, é fácil ver que pode haver muitos problemas difíceis de NP que não pertencem ao conjunto de NP e são mais difíceis de resolver. Como exemplo intuitivo, a versão de otimização do vendedor ambulante, na qual precisamos encontrar um cronograma real, é mais difícil do que a versão de decisão do vendedor ambulante, onde precisamos apenas determinar se existe ou não um cronograma com comprimento <= k.

Sushant Sharma
fonte
5

Existem respostas muito boas para essa pergunta em particular, então não há sentido em escrever minha própria explicação. Então, tentarei contribuir com um excelente recurso sobre diferentes classes de complexidade computacional.

Para alguém que pensa que a complexidade computacional é apenas sobre P e NP, aqui está o recurso mais exaustivo sobre diferentes problemas de complexidade computacional. Além dos problemas solicitados pelo OP, listou aproximadamente 500 classes diferentes de problemas computacionais com boas descrições e também a lista de trabalhos de pesquisa fundamentais que descrevem a classe.

Salvador Dalí
fonte
3

Pelo que entendi, um problema np-hard não é "mais difícil" do que um problema np-complete . De fato, por definição, todo problema np-complete é:

  1. em NP
  2. np-hard

insira a descrição da imagem aqui

- Introdução. aos algoritmos (3ed) de Cormen, Leiserson, Rivest e Stein, pág. 1069

MrDrews
fonte
3
Sua compreensão está incorreta. Sua definição de NP-complete está correta, mas não afeta sua primeira declaração. Todos os problemas no NP-hard são pelo menos tão difíceis quanto os do NP-complete; alguns (por exemplo, o Halting Problem, que é infinitamente difícil, e en.wikipedia.org/wiki/EXPSPACE ) são comprovadamente mais difíceis.
Jim Balter
2

Encontre alguma definição interessante:

insira a descrição da imagem aqui

sendon1982
fonte