É necessário que um problema difícil de NP seja computável?
Acho que não, mas não tenho certeza.
É necessário que um problema difícil de NP seja computável?
Acho que não, mas não tenho certeza.
Respostas:
N, uma N P
Problemas incontestáveis são, então, vacuamente difíceis: suponha que possamos resolver um em tempo polinomial. Em seguida, usamos a prova de que é incontestável derivar que é computável e incontestável, uma contradição. Deste falsidade, podemos derivar qualquer coisa, ou seja, que existe um algoritmo de tempo polinomial para qualquer N P
Por exemplo, considerar o problema da paragem H
Assim, com uma única chamada para um algoritmo de tempo poli resolver o Deter problema, podemos resolver qualquer N P problema em tempo polinomial.
Essa redução não é útil, porque tudo o que faz é dizer se "se falso, então alguma coisa". Já sabemos que não existe um algoritmo polytime para problemas incontestáveis.
Parece haver alguma confusão considerável nessa comunidade em relação a essa questão. Darei uma resposta detalhada na esperança de limpar a água e iluminar a relação entre computabilidade e dureza NP.
Primeiro, acredito que ser claro e explícito sobre as várias definições envolvidas resolverá muita confusão.
Uma string é uma sequência finita de caracteres de algum alfabeto finito fixo.
Um problema de decisão é um conjunto de strings. (Esse conjunto geralmente é infinito.) Pense no problema de decisão como cadeias de teste para alguma propriedade: as cadeias com a propriedade estão no conjunto e as cadeias sem a propriedade não.
Suponha que temos dois problemas de decisão, A e B . Digamos que A seja redutível em tempo polinomial para B se houver algum polinômio p ( x ) e algoritmo algum algoritmo M, de modo que, para todas as strings s ,
A B A B p(x) M s
- Se você fornecer M com entrada s , M será interrompido em menos de p ( | s | ) etapas (onde | s | é o comprimento da sequência s ) e gera uma sequência M ( s ) .
M s M p(|s|) |s| s M(s) - s é em A , se e apenas se H ( s ) é em B .
s A M(s) B Um problema de decisão B é NP-hard se, por cada NP problema de decisão A , A é redutível em tempo polinomial para B .
B A A B Um problema de decisão é computável se houver um algoritmo M , que, para todas as strings s ,
M s
- Se você fornecer a M as entradas s , M interromperá e emitirá "yes" ou "no".
M s M - A saída é "yes" se s estiver em A e "no" caso contrário.
s A
Com as definições acima, podemos esclarecer imediatamente o que acho que pode ser a principal raiz da sua pergunta: nada nas definições de problema de decisão, reduções ou dureza de NP exige que os problemas de decisão sejam computáveis. As definições fazem todo sentido, pensando nos problemas de decisão como conjuntos arbitrários de strings, e esses conjuntos podem ser muito desagradáveis.
Isso deixa duas perguntas sobre a mesa:
A pergunta 1 é mais fácil de responder. Existem duas maneiras particularmente importantes de encontrar problemas de decisão não computáveis que são difíceis para o NP. O primeiro é o problema da parada: o problema da parada, H , tem a propriedade de que cada computável problema de decisão é redutível em tempo polinomial para H . Como os problemas de NP são computáveis, todos os problemas de NP são reduzidos em tempo polinomial para H , então H é NP.
A outra maneira importante de criar um problema NP-hard não computável é observar que podemos combinar qualquer problema NP-hard conhecido com qualquer problema não-computável conhecido. Seja A NP rígido e B não computável. Forme o problema de decisão A ⊕ B da seguinte maneira: A ⊕ B contém as seqüências de caracteres do formato "0, seguidas por uma sequência de caracteres em A " e as do formulário "1, seguidas de uma sequência de caracteres em B ". A ⊕ B é NP-difícil porque podemos transformar qualquer redução (de qualquer problema) em A em uma redução em A ⊕ B
A questão 2 é consideravelmente mais complicada, mas, de fato, existem problemas de decisão não computáveis que não são difíceis de NP (assumindo P ≠ NP). A boa resposta de Yuval constrói esse problema de decisão explicitamente. (Para todos os teóricos da computabilidade na sala, qualquer "Cohen Π 0 1 -generic" irá fazer o truque, também.) Eu vou quebrar porque a intuição de que "problemas NP-difíceis são difíceis problemas, não computáveis são mais difíceis " está errado.
A dureza NP e a não-computabilidade dizem que um problema é "difícil" em um sentido muito geral, mas são muito diferentes e não devem ser agrupados como o mesmo tipo de fenômeno. Especificamente, a dureza NP é uma propriedade "positiva": um problema NP rígido A é difícil no sentido de que, dado o acesso a uma folha de dicas para A , você pode resolver uma classe difícil de problemas
("Forçar", a propósito, é a técnica usada para produzir o "Cohen Co 0 1 genérico" que eu mencionei. Para ser muito vago, forçar é uma maneira geral de produzir coisas que são "genéricas", pois possuem sem propriedades positivas e todas as propriedades negativas. É por isso que o forçar pode produzir diretamente um problema que não é computável nem difícil de NP.)
Não. NP-Hard significa que é tão difícil ou mais difícil que os problemas mais difíceis de NP. Intuitivamente, ser desconectável tornará muito mais difícil que o NP.
Wikipedia:
Existem problemas de decisão que são difíceis de NP, mas não completos, por exemplo, o problema de parada.
Todo mundo sabe que não é computável
problem()
função que possamos chamar.
Para completar, vamos provar o seguinte teorema:
Existe uma linguagem incontestável que não é difícil para NP se e somente se P ≠ NP.
≠
Se P = NP, qualquer idioma não trivial (que difere de ∅ , { 0 , 1 } ∗ ) é NP-difícil (exercício) e, em particular, qualquer linguagem não-confiável é NP-difícil.
Agora suponha que P ≠ NP. Deixe- T i haver alguma enumeração de todas as máquinas de Turing. Construiremos o idioma necessário L em etapas. Em cada etapa, vamos manter a { 0 , 1 , ? } coloração de { 0 , 1 } ∗ que também denotamos por L ; aqui 0 significa que decidimos que a string não está em L , 1 significa que decidimos que a string está em L e ?
Na etapa 2 i , pensamos em T i como uma máquina que seja aceita sua entrada, rejeita, ou nunca pára. Se T i nem sempre parar, em seguida, nós não fazemos nada. Se T i sempre pára então encontramos uma string x tal que L ( x ) = ? e defina L ( x ) : = 0 se T i ( x ) aceita e L ( x ) : = 1 se T
No passo 2 i + 1 , pensamos t i como uma máquina de calcular um (possivelmente) função parcial na sua entrada. Se T i não é total, ou se é total, mas não é executado em tempo polinomial, ou se é total, mas seu alcance é finito, não fazemos nada. Se T i é total, é executado em tempo polinomial, e tem alcance infinito, então encontramos uma string x tal que L ( T i ( x ) ) = ? . Se x ∈ S A
Depois infinitamente muitas etapas, temos um { 0 , 1 , ? } coloração de { 0 ,
O idioma resultante L não é computável: a etapa 2 i garante que T i não o calcule. Também não é difícil para o NP, mas aqui o raciocínio é um pouco mais delicado. Suponha-se que o t i é uma redução polytime de sab para L . Se o intervalo de T i é finito, então podemos transformar T i em uma máquina polytime decidir SAT, listando a tabela verdade de L na gama de T i . Isso é impossível pela suposição P ≠ NP. Assim t i tem uma gama infinita, mas, em seguida, o passo 2 i
Uma linguagem L é NP-difícil se para cada L ' ∈ N P temos que L ' é redutível em tempo polinomial para L . O problema de aceitação para máquinas de Turing não determinísticas
ANTM={⟨M,w⟩∣M is a nondeterministic Turing machine that accepts w}
is undecidable and is NP-hard. For consider an L′∈NP
f(x)=⟨M,x⟩
I think what causes people to think there is no uncomputable NP-hard problem is that they miss the point that NP-hardness is a lower bound on the hardness of a problem, not an upper bound on their hardness like P or NP.
A language L being NP-hard means that it is above language in NP and that is. Now if you understand this what need is to show that there are arbitrary harder problem.
Let A be a language. Consider algorithms augmented with a black-box that they can use to deciding membership in A. Let's denote them by CA. It is easy to see that the halting problem for CA, HaltCA is not in CA.
In computablity theory this is called jump of A and is denoted by A′. So A<A′ strictly. And nothing stops us from repeating this: A<A′<A″<A‴<...