Dies ist nur ein erweiterter Kommentar. Vor einiger Zeit habe ich mich gefragt, wie schnell ein Multitape-NTM sein kann, das eine (vernünftig codierte) NP-vollständige Sprache akzeptiert. Ich bin auf diese Idee gekommen:
3-SAT bleibt NP-vollständig, auch wenn Variablen unär dargestellt werden. Insbesondere können wir eine Klausel - angenommen - einer beliebigen 3-SAT-Formel φ auf n Variablen und m Klauseln in einer Folge von Zeichen über dem Alphabet Σ = { + , - , 1 konvertieren }, in der jede Variable unär dargestellt wird:(xi∨¬xj∨xk)φnmΣ={+,−,1}
+1i0,−1j,+1k
Zum Beispiel konvertiert werden in:(x2∨−x3∨+4)
+110-1110+11110
Wir können also eine 3-SAT-Formel in eine äquivalente Zeichenfolge U ( φ i ) umwandeln, die ihre Klauseln verkettet. Die Sprache L U =φiU(φi) NP-vollständig.LU={U(φi)∣φi∈3−SAT}
Ein 2-Band-NTM kann entscheiden, ob ein String istx∈LUauf diese Weise.2|x|
- Der erste Kopf tastet die Eingabe von links nach rechts ab und verfolgt sie mit der internen Logik, wenn er eine Klausel betritt oder verlässt oder das Ende der Formel erreicht. Immer wenn es ein oder - findet , bewegt sich der zweite Kopf auf der 1 i , die x i darstellt, nach rechts . Am Ende von 1 i , wenn der zweite Kopf auf einer 0 ist, dann schätzt er einen Wahrheitswert + oder -+−1ixi1i0+− (er nimmt eine Zuordnung vor) und schreibt ihn auf das zweite Band; Wenn es ein oder - findet, wurde dieser Variablen bereits ein Wert zugewiesen.+−
- In beiden Fällen vergleicht das NTM unter Verwendung der internen Logik den Wahrheitswert unter dem zweiten Kopf (die Zuordnung) mit dem zuletzt gesehenen oder - ; wenn sie übereinstimmen, ist die Klausel erfüllt;+−
- dann kann der zweite Kopf in die Zelle ganz rechts zurückkehren;
- Mit der internen Logik kann der NTM verfolgen, ob alle Klauseln erfüllt sind, während sich der erste Kopf zum Ende der Eingabe bewegt.
Beispiel:
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)
Die Zeit kann auf reduziert werden x | wenn wir der Klauseldarstellung einige redundante Symbole hinzufügen:|x|
+1i0i,−1j0j,+1k0k...+++
( markiert das Ende der Formel)+++
Auf diese Weise kann der zweite Kopf zur Zelle ganz links zurückkehren, während der erste die 0 i abtastet0i Teil . Mit als Klauselbegrenzer und +++ als Markierung für das Ende der Formel können wir dieselbe Darstellung für CNF-Formeln mit einer beliebigen Anzahl von Litern pro Klausel verwenden.+++++