Ce n'est qu'un commentaire étendu. Il y a quelques fois, j'ai demandé (moi-même :-) à quelle vitesse un NTM multitape qui accepte un langage NP-complet (raisonnablement encodé) peut être. J'ai eu cette idée:
3-SAT reste NP-complet même si les variables sont représentées en unaire. En particulier, nous pouvons convertir une clause - supposons - d'une formule arbitraire 3-SAT φ sur n variables et m clauses dans une séquence de caractères sur l'alphabet Σ = { + , - , 1 } dans lequel chaque occurrence de variable est représentée en unaire:(xi∨¬xj∨xk)φnmΣ={+,−,1}
+1i0,−1j,+1k
Par exemple, peut être converti en:(x2∨−x3∨+4)
+110-1110+11110
On peut donc convertir une formule 3-SAT en une chaîne équivalente U ( φ i ) concaténant ses clauses. La langue L U = { U ( φ i ) ∣ φ i ∈φiU(φi) est NP-complet.LU={U(φi)∣φi∈3−SAT}
Un NTM à 2 bandes peut décider si une chaîne dans le temps 2 | x | de cette façon.x∈LU2|x|
- la première tête analyse l'entrée de gauche à droite et avec la logique interne, elle garde une trace lorsqu'elle entre ou quitte une clause ou atteint la fin de la formule. Chaque fois qu'il trouve un ou - , la deuxième tête commence à se déplacer à droite avec elle sur le 1 i qui représente x i . A la fin de 1 i , si la deuxième tête est sur un 0 alors elle devine une valeur de vérité + ou -+−1ixi1i0+− (elle fait une affectation) et l'écrit sur la deuxième bande; s'il trouve un ou - alors cette variable a déjà reçu une valeur;+−
- dans les deux cas, en utilisant la logique interne, le NTM fait correspondre la valeur de vérité sous la deuxième tête (l'affectation) avec la dernière vue ou -; s'ils correspondent alors la clause est satisfaite;+−
- alors la deuxième tête peut retourner dans la cellule la plus à droite;
- avec la logique interne, le NTM peut garder une trace si toutes les clauses sont satisfaites pendant que la première tête se déplace vers la fin de l'entrée.
Exemple:
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)
Le temps peut être réduit à si nous ajoutons des symboles redondants à la représentation de la clause:|x|
+1i0i,−1j0j,+1k0k...+++
( marque la fin de la formule)+++
De cette façon, la deuxième tête peut retourner dans la cellule la plus à gauche tandis que la première balaye la partie . Utilisation de ++ comme délimiteur de clause et +++0i+++++ comme marqueur pour la fin de la formule, nous pouvons utiliser la même représentation pour les formules CNF avec un nombre arbitraire de littéraux par clause.