Ist es möglich, bei einer von einer Turing-Maschine definierten Sprache L algorithmisch zu bestimmen, ob L in NP liegt?
Ist es möglich, bei einer von einer Turing-Maschine definierten Sprache L algorithmisch zu bestimmen, ob L in NP liegt?
Antworten:
Nein. Erstens ist dies nach dem Satz von Rice eine Eigenschaft von TMs, die nur von der Sprache abhängt, die sie berechnen, und daher nicht berechenbar ist.
Darüber hinaus ist jedoch bekannt, dass die Indexmenge von (dh die Menge von TMs, die Sprachen in berechnen ) vollständig ist ( in der arithmetischen Hierarchie der , nicht die Polynom-Hierarchie).N P ≤ 0 3 ≤ 0 3
Fragen wie diese wurden zuerst von Hajek untersucht . Weitere Informationen finden Sie zB in diesem Artikel von Ken Regan.
Noch ein paar großartige Nuggets aus Hajeks Papier:
Die Antwort auf Ihre Frage lautet Nein, wie Joshua Grochow betonte.
Es ist jedoch, wie Holger feststellte, möglich, in linearer Zeit zu prüfen, ob die nicht deterministische Turing - Maschine (NTM) sich selbst "taktet" und nach n ^ k Schritten für eine Konstante k anhält, und zwar durch eine Standardmethode zum Simulieren einer Uhr (wie z. B. die Turing - Maschine) Code unten). Oft, wenn eine Zeitung oder ein Buch (fälschlicherweise) andeutet, dass es möglich ist, festzustellen, ob eine NTM eine Polynomzeit ist, ist dies das, was sie wirklich bedeuten. Vielleicht haben Sie deshalb die Frage gestellt? (Ich hatte die gleiche Frage, als ich zum ersten Mal die Komplexitätstheorie lernte und irgendwo die Aussage sah, dass es möglich ist, zu überprüfen, ob ein TM poly-time ist.) Die eigentliche Frage ist, warum man dies tun möchte, worauf ich im Folgenden näher eingehen werde wie .
Es gibt viele Möglichkeiten, eine solche Uhrfunktion hinzuzufügen. Stellen Sie sich zum Beispiel vor, Sie führen am Eingang x der Länge n abwechselnd eine Anweisung des "primären Algorithmus" aus, der getaktet wird, und dann eine Anweisung des folgenden Algorithmus, der in (etwas in der Nähe von) n ^ k Schritten endet:
für i_1 = 1 bis n für i_2 = 1 bis n ... für i_k = 1 bis n no-op; Rückkehr;
Wenn der obige Code zurückgegeben wird, bevor der primäre Algorithmus anhält, halten Sie die gesamte Berechnung an (z. B. mit Zurückweisung).
Der Algorithmus, der entscheidet, ob ein NTM von dieser Form ist, meldet, wenn er als Versuch interpretiert wird, anhand eines Algorithmus zu entscheiden, ob seine Eingabe ein Mehrfachzeit-NTM ist, einige falsche Negative: Einige NTMs werden garantiert in der Polynomzeit angehalten, obwohl Sie führen nicht abwechselnd eine Anweisung eines Algorithmus mit einer Anweisung einer Uhr aus, wie der obige Code (daher würde sie abgelehnt, obwohl sie poly-time ist).
Es gibt aber keine Fehlalarme. Wenn ein NTM den Test besteht, stoppt es definitiv in der Polynomzeit, daher definiert es eine NP-Sprache. Möglicherweise wird jedoch das Verhalten des zugrunde liegenden primären Algorithmus geändert, wenn die Uhr manchmal abläuft, bevor der primäre Algorithmus anhält, wodurch die Berechnung zurückgewiesen wird, obwohl der primäre Algorithmus möglicherweise zugestimmt hat, wenn genügend Zeit zum Beenden zur Verfügung steht. Daher kann die gewählte Sprache von der des primären Algorithmus abweichen. Aber, und dies ist der Schlüssel, wenn der ausgeführte primäre Algorithmus tatsächlich ein Polynom-Zeit-Algorithmus ist, der in der Zeit p (n) abläuft, und wenn die Konstante k in der Uhr groß genug ist, dass n ^ k> p (n), dann Der primäre Algorithmus stoppt immer, bevor die Uhr abläuft. In diesem Fall wird die Antwort des primären Algorithmus nicht geändert, so dass der primäre Algorithmus und das getaktete NTM, das ihn simuliert, dieselbe NP-Sprache bestimmen.
Warum ist das wichtig? Dies bedeutet, dass es möglich ist, "alle NP-Sprachen aufzuzählen" (was, wie ich bereits sagte, in der Literatur oft als "Entscheidung darüber, ob eine gegebene NTM eine Mehrfachzeit ist" oder "alle Mehrfachzeit-NTMs aufzuzählen" angegeben ist). Genauer gesagt ist es möglich, eine unendliche Liste von M_1 M_2, ... von NTM mit den folgenden Eigenschaften aufzulisten
Was nicht passiert ist, dass jedes polynomielle NTM auf der Liste steht. Aber jede NP-Sprache hat eine unendliche Anzahl von NTMs, die sie darstellen. Somit ist garantiert, dass jede NP-Sprache mindestens einige ihrer repräsentativen NTMs auf der Liste hat, insbesondere alle diese NTMs mit einem ausreichend großen Index k, dass n ^ k die Laufzeit von M_k überschreitet.
Dies ist nützlich, um Tricks wie die Diagonalisierung auszuführen, die die algorithmische Aufzählung solcher unendlichen (oder unbegrenzten) Listen aller NP-Sprachen erfordern. Und natürlich gilt diese ganze Diskussion für viele andere Arten von Maschinen außer für Mehrfachzeit-NTMs, wie zum Beispiel für Mehrfachzeit-deterministische TMs.