Este é apenas um comentário estendido. Algumas vezes atrás eu perguntei (eu :-) quão rápido um NTM multitape que aceita uma linguagem NP completa (razoavelmente codificada) pode ser. Eu tive essa ideia:
O 3-SAT permanece NP-completo, mesmo que as variáveis sejam representadas em unárias. Em particular, pode converter uma cláusula - suponha que - de uma fórmula arbitrária 3-SAT φ em n variáveis e m cláusulas em uma sequência de caracteres através alfabeto Σ = { + , - , 1 } em que cada ocorrência variável é representada em unário:(xi∨¬xj∨xk)φnmΣ={+,−,1}
+1i0,−1j,+1k
Por exemplo, pode ser convertido em:(x2∨−x3∨+4)
+110-1110+11110
Assim, podemos converter uma fórmula 3-SAT em uma seqüência equivalente U ( φ i ) concatenação de suas cláusulas. A linguagem L U = { U ( φ i ) | φ i ∈ 3 - S A T } é NP-completo.φiU(φi)LU={U(φi)∣φi∈3−SAT}
Um NTM de 2 fitas pode decidir se uma sequência no tempo 2 | x | nesse caminho.x∈LU2|x|
- o primeiro cabeçalho verifica a entrada da esquerda para a direita e, com a lógica interna, mantém o controle quando entra ou sai de uma cláusula ou chega ao final da fórmula. Sempre que encontra um ou - , o segundo cabeçote começa a se mover com ele no 1 i que representa x i . No final de 1 i , se o segundo cabeçalho estiver em 0 , ele adivinha um valor de verdade + ou - (faz uma atribuição) e o grava na segunda fita; se encontrar um + ou - , essa variável já recebeu um valor;+−1ixi1i0+−+−
- nos dois casos, usando a lógica interna, o NTM corresponde ao valor de verdade sob o segundo cabeçalho (a atribuição) com o último visto ou - ; se eles correspondem, a cláusula é satisfeita;+−
- então a segunda cabeça pode retornar à célula mais à direita;
- com a lógica interna, o NTM pode acompanhar se todas as cláusulas são satisfeitas enquanto o primeiro cabeçalho se move para o final da entrada.
Exemplo:
Tape 1 (formula) Tape 2 (variable assignments)
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0+00000000000... first guess set x2=T; matches +
^ ^ so remember that current clause is satisfied
+110-1110+11110... 0+00000000000...
^ ^
...
+110-1110+11110... 0+00000000000...
^ ^
...
+110-1110+11110... 0++0000000000... second guess set x3=T
^ ^ don't reject because current
clause is satisfied (and in every
case another literal must be parsed)
O tempo pode ser reduzido para se adicionarmos alguns símbolos redundantes à representação da cláusula:|x|
+1i0i,−1j0j,+1k0k...+++
( marca o final da fórmula)+++
Dessa maneira, o segundo cabeçote pode retornar à célula mais à esquerda, enquanto o primeiro verifica a parte . Usando ++ como delimitador de cláusula e +++ como marcador para o final da fórmula, podemos usar a mesma representação para fórmulas CNF com um número arbitrário de literais por cláusula.0i+++++