É necessário que um problema difícil de NP seja computável?
Acho que não, mas não tenho certeza.
fonte
É necessário que um problema difícil de NP seja computável?
Acho que não, mas não tenho certeza.
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.
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.H H H H
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 ⊕ BA B A⊕B A⊕B A B A⊕B A A⊕B : basta ajustar o algoritmo para gerar um "0" extra na frente da string de saída. A ⊕ B não é computável, pois a computação de A ⊕ B requer a decisão de quais cadeias que começam com "1" estão no conjunto; isso é impossível, pois B não é computável.A⊕B A⊕B 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.≠ Π01
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 problemasA A . Por outro lado, a não computabilidade é uma propriedade "negativa": um problema não computável A difícil no sentido de que você não pode resolver A com uma determinada classe de recursosA A .
("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.)Π01
fonte
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:
Todo mundo sabe que não é computável
fonte
problem()
função que possamos chamar.Para completar, vamos provar o seguinte teorema:
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.∅,{0,1}∗
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 ?≠ Ti L {0,1,?} {0,1}∗ L 0 L 1 L ? significa que ainda não decidimos. Todas as cordas, com exceção de finitas, serão coloridas ? .?
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 T2i Ti Ti Ti x L(x)=? L(x):=0 Ti(x) L(x):=1 i ( x ) rejeita.Ti(x)
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 A2i+1 Ti Ti Ti x L(Ti(x))=? T (ou seja, se xx∈SAT x codifica um CNF satisfatório), então definimos L (x ) : = 0 x ) : = 1 . e, caso contrário, definimos L (L(x):=0 L(x):=1
Depois infinitamente muitas etapas, temos um { 0 , 1 , ? } coloração de { 0 ,{0,1,?} 1 } ∗ que concluímos em um idioma real de maneira arbitrária.{0,1}∗
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 iL 2i Ti Ti L Ti Ti L Ti ≠ Ti + 1 exclui a redução de SAT para L2i+1 L .
fonte
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ísticasL L′∈NP L′ L
ANTM={⟨M,w⟩∣M is a nondeterministic Turing machine that accepts w}
is undecidable and is NP-hard. For consider an L′∈NPL′∈NP . L′L′ is decided by some nondeterministic Turing machine M′M′ with polynomial time complexity. A poly-time reduction ff from L′L′ to ANTMANTM is given by
f(x)=⟨M,x⟩
fonte
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‴<...
fonte