Ich habe kürzlich folgendes gehört:
"Eine nicht deterministische Maschine ist nicht dasselbe wie eine probabilistische Maschine. In groben Zügen ist eine nicht deterministische Maschine eine probabilistische Maschine, in der Wahrscheinlichkeiten für Übergänge nicht bekannt sind."
Ich habe das Gefühl, dass ich verstanden habe, aber das tue ich wirklich nicht. Könnte mir das jemand erklären (im Zusammenhang mit Maschinen oder allgemein)?
Edit 1:
Nur um zu verdeutlichen, das Zitat stand im Zusammenhang mit dem endlichen Automaten, aber die Frage ist auch für Turing-Maschinen von Bedeutung, wie andere geantwortet haben.
Außerdem höre ich Leute sagen: "... dann wähle ich nicht deterministisch Objekt x aus der Menge". Früher dachte ich, sie meinen "zufällig". Daher die Verwirrung.
Antworten:
Es ist wichtig zu verstehen, dass Informatiker den Begriff "nicht deterministisch" anders verwenden als in anderen Wissenschaften. Ein nicht deterministisches TM ist tatsächlich deterministisch im Sinne der Physik - das heißt, ein NTM liefert bei einer bestimmten Eingabe immer die gleiche Antwort: Es akzeptiert immer oder lehnt immer ab. Ein probabilistisches TM akzeptiert oder lehnt eine Eingabe mit einer bestimmten Wahrscheinlichkeit ab, sodass sie bei einem Durchlauf akzeptiert und bei einem anderen abgelehnt werden kann.
Ausführlicher: Bei jedem Schritt der von einem NTM durchgeführten Berechnung können anstelle einer einzelnen Übergangsregel mehrere Regeln aufgerufen werden. Um festzustellen, ob der NTM akzeptiert oder ablehnt, sehen Sie sich alle möglichen Zweige der Berechnung an. (Wenn also zum Beispiel bei jedem Schritt genau zwei Übergänge zur Auswahl stehen und jeder Berechnungszweig insgesamt N Schritte aufweist, müssen Gesamtwerte berücksichtigt werden.) Für ein Standard-NTM wird eine Eingabe akzeptiert Wenn einer der Berechnungszweige akzeptiert.2N
Dieser letzte Teil der Definition kann geändert werden, um andere verwandte Typen von Turing-Maschinen zu erhalten. Wenn Sie an Problemen interessiert sind, die eine eindeutige Lösung haben, können Sie das TM akzeptieren lassen, wenn genau ein Zweig dies akzeptiert. Wenn Sie am Mehrheitsverhalten interessiert sind, können Sie festlegen, dass das TM akzeptiert wird, wenn mehr als die Hälfte der Zweige akzeptiert wird. Und wenn Sie zufällig (gemäß einer Wahrscheinlichkeitsverteilung) einen der möglichen Zweige auswählen und auf der Grundlage dessen, was dieser Zweig tut, akzeptieren oder ablehnen, haben Sie ein probabilistisches TM.
quelle
Im Kontext von Turing Machines bedeutet "nicht deterministisch" wirklich "parallel". Ein randomisierter Algorithmus kann die Zweige des Berechnungsbaums einer nicht deterministischen Turing-Maschine nach dem Zufallsprinzip untersuchen, eine nicht deterministische Turing-Maschine kann sie jedoch gleichzeitig untersuchen, was ihr ihre Kraft verleiht.
In anderen Kontexten (ich kann nicht aus Ihrem Zitat sagen, ob Sie über Turing Machines sprechen) könnte ein zufälliger Algorithmus absichtlich Zufälligkeit verwenden, während ein Algorithmus, den Sie deterministisch sein wollten, aufgrund eines Fehlers möglicherweise Nichtdeterminismus aufweist ...
Wenn Leute als Reaktion auf Ihre Bearbeitung sagen, dass sie ein Element aus einer Menge nicht deterministisch auswählen, meinen sie möglicherweise nur zufällig. Es ist jedoch auch möglich, dass sie "das rechte Element magisch aus der Menge auswählen" bedeuten. Eine übliche Art, nicht deterministische Turing-Maschinen zu betrachten, besteht darin, dass sie eine Lösung zunächst auf magische Weise "erraten" und dann ihre Richtigkeit überprüfen. Natürlich können Sie diese magische Vermutung nur als Ergebnis der parallelen Überprüfung aller Möglichkeiten ansehen.
quelle
Es gibt verschiedene Kontexte, in denen "deterministisch", "zufällig" und "nicht deterministisch" drei verschiedene Bedeutungen haben. In Kontexten mit mehreren Teilnehmern, z. B. Sicherheit und Parallelität, ist die Intuition häufig wie folgt:
deterministisch bedeutet "ich kann wählen"
Nicht deterministisch bedeutet, dass „jemand anderes wählen kann“
zufällig bedeutet "niemand darf wählen"
Einige Beispiele:
[Nebenläufigkeit, zufällig] Betrachten Sie ein Netzwerkprotokoll wie Ethernet , bei dem mehrere Knoten jederzeit eine Nachricht senden können. Wenn zwei Knoten in sehr kurzen Abständen eine Nachricht senden, liegt eine Kollision vor: Die Nachrichten überlappen sich und sind nicht lesbar. Wenn eine Kollision auftritt, müssen beide Knoten später erneut versuchen, die Nachrichten zu senden. Stellen Sie sich vor, Sie schreiben die Spezifikation für Ethernet. Wie legen Sie die Verzögerung zwischen Wiederholungsversuchen fest? (Die Verzögerungen sollten anders sein oder es kommt wieder zu einer Kollision!)
deterministisch: Definieren Sie einen Algorithmus, den beide Knoten verwenden müssen. Dies wird für Ethernet nicht durchgeführt, da der Algorithmus, um unterschiedliche Ergebnisse zu erzielen, einen Knoten über den anderen (für einen bestimmten Nachrichteninhalt) privilegieren muss, und Ethernet dies vermeidet.
Nicht deterministisch: Lassen Sie jeden Implementierer entscheiden. Dies ist nicht gut, da die Implementierer auf beiden Knoten möglicherweise denselben Algorithmus auswählen.
zufällig: Jeder Knoten muss einen zufälligen Verzögerungswert auswählen (mit einer bestimmten Verteilung). So funktioniert das. Es gibt eine geringe Wahrscheinlichkeit, dass die beiden Knoten dieselbe Verzögerung wählen und es eine weitere Kollision gibt, aber die Erfolgswahrscheinlichkeit steigt asymptotisch gegen 1, wenn die Anzahl der Wiederholungsversuche zunimmt.
[Parallelität, nicht deterministisch] Sie schreiben einen parallelen Algorithmus. In einer bestimmten Situation kann es zu einem Deadlock kommen. Wie können Sie das Auftreten eines Deadlocks verhindern? Dies hängt davon ab, welche Art der Zeitplanung in Ihrer Umgebung für den gemeinsamen Zugriff verwendet wird.
deterministisch: Der Scheduler wechselt immer zwischen Threads an bestimmten genau definierten Punkten, z. B. nur, wenn der Code explizit ergibt. Dann sorgen Sie einfach dafür, dass die Threads in schlechten Zeiten nicht nachgeben.
random: Der Scheduler wechselt die Threads garantiert nach dem Zufallsprinzip. Dann kann eine praktikable Strategie darin bestehen, den Deadlock zu erkennen, falls er auftritt, und den Algorithmus von Anfang an neu zu starten.
Nicht deterministisch (die meisten Scheduler sind so): Sie wissen nicht, wann der Scheduler zwischen Threads wechselt. Sie müssen also wirklich den Stillstand vermeiden. Wenn Sie wie im Zufallsfall versucht haben, zu erkennen und neu zu starten, laufen Sie Gefahr, dass der Scheduler Ihre Threads immer wieder auf die gleiche Weise plant.
[Sicherheit, Zufall] Sie schreiben eine Anwendung mit einer Passwortabfrage. Wie modelliert man einen Angreifer?
deterministisch: Der Angreifer versucht immer die gleichen Passwörter. Das ist überhaupt kein nützliches Modell für einen Angreifer - Angreifer sind per Definition nicht vorhersehbar.
Nicht deterministisch: Der Angreifer kennt Ihr Passwort und gibt es ein. Dies zeigt die Beschränkung von Passwörtern: Sie müssen geheim gehalten werden. Wenn Ihr Passwort geheim ist, ist dieser Angreifer unrealistisch.
zufällig: Der Angreifer versucht es mit einem zufälligen Passwort. In diesem Fall handelt es sich um ein realistisches Modell eines Angreifers. Sie können untersuchen, wie lange es dauern würde, bis der Angreifer Ihr Kennwort erraten würde, je nachdem, welche zufällige Verteilung er verwendet. Ein gutes Passwort ist ein Passwort, das lange für eine realistische Verteilung benötigt.
[Sicherheit, nicht deterministisch] Sie schreiben eine Anwendung und befürchten, dass sie eine Sicherheitslücke aufweist. Wie modelliert man einen Angreifer?
deterministisch: Der Angreifer weiß alles, was Sie wissen. Auch dies ist kein nützliches Modell für einen Angreifer.
zufällig: Der Angreifer wirft zufälligen Müll und hofft, dass Ihr Programm abstürzt. Das kann manchmal nützlich sein ( Fuzzing ), aber der Angreifer ist vielleicht schlauer.
Nicht deterministisch: Wenn es ein Loch gibt, wird der Angreifer es schließlich finden. Sie sollten Ihre Anwendung also besser absichern (die Intelligenzanforderung für den Angreifer erhöhen; beachten Sie, dass dies eine Intelligenzanforderung ist und keine Rechenanforderung. Dies gilt als nicht deterministisch, bis die KI eintritt.) Oder besser beweisen, dass es keine gibt Sicherheitslücke und somit einen solchen Angreifer gibt es nicht.
quelle
Ein Beispiel zur Verdeutlichung:
Angenommen, Sie müssen eine Tür auswählen, um zwischen 10000 Türen zu öffnen (sagen wir, hinter einer der Türen befindet sich ein Preis). Zufällig auswählen bedeutet, dass Sie eine der 10000 Türen auswählen und betreten. Wenn sich hinter nur einer Tür ein Preis befindet, werden Sie ihn höchstwahrscheinlich nicht finden. Eine nicht deterministische Maschine würde alle 10000 Türen gleichzeitig betreten. Wenn es irgendwo einen Preis gibt, wird die nicht deterministische Maschine ihn finden.
quelle
Definition einer nicht deterministischen Turing-Maschine : Eine Turing-Maschine, die für einige Kombinationen von Inhalten der aktuellen Zelle und des aktuellen Zustands mehr als einen nächsten Zustand aufweist. Eine Eingabe wird akzeptiert, wenn ein Bewegungsablauf zur Annahme führt.
Definition der probabilistischen Turing-Maschine : Eine nicht deterministische Turing-Maschine (TM), die an jedem Punkt zufällig nach einer Wahrscheinlichkeitsverteilung zwischen verfügbaren Übergängen wählt.
Probabilistische Turingmaschine ist eine nicht deterministische Turingmaschine, die Fehler machen kann.
PPT fand ich hilfreich.
quelle
Ich bevorzuge folgende Definition:
Eine probabilistische Turingmaschine gibt es nicht! Es gibt nur deterministische Maschinen (in jedem Schritt ein einzelner möglicher Folgezustand) und nicht deterministische Maschinen (in jedem Schritt eine konstante Anzahl möglicher Folgezustände).
Der Nichtdeterminismus funktioniert wie folgt: Betrachten Sie eine nichtdeterministische Maschine, die bei jeder Eingabe anhält (möglich, wenn das Problem entscheidbar ist), bei der jede mögliche Berechnung die gleiche Anzahl von Schritten verwendet und bei der jeder Schritt genau 2 mögliche Folgezustände aufweist ( beides keine wirkliche einschränkung). Wie in der Definition von NP akzeptiert eine nicht deterministische Maschine eine Eingabe, wenn mindestens eine mögliche akzeptierende Berechnung vorhanden ist, und lehnt die Eingabe ab, wenn alle Berechnungen ablehnen.
Die Zufälligkeit kommt wie folgt ins Spiel: Sie können einen einzelnen Berechnungspfad von einer solchen nicht deterministischen Maschine wie oben angegeben gleichmäßig zufällig auswählen. Sie akzeptieren genau dann, wenn dieser zufällig gewählte Berechnungspfad akzeptiert wird. Dieser randomisierte Ansatz "löst" Ihr Problem, wenn diese Antwort mit überwältigender Wahrscheinlichkeit richtig ist.
Der Unterschied zwischen Nichtdeterminismus und Zufälligkeit besteht also darin, ob Sie nach der bloßen Existenz einer richtigen Ja-Antwort (und zuverlässigen Nein-Antworten) suchen oder ob Sie daran interessiert sind, Ihr Problem "die meiste Zeit" zu lösen .
quelle
Um es einfach zu halten: Eine nicht deterministische Maschine kann das Ergebnis jedes Münzwurfs optimal auswählen (wenn Sie die Analogie mit einer probabilistischen Maschine mögen). Sie können sich auch vorstellen, dass die Berechnung für jedes Ergebnis des Münzwurfs parallel ausgeführt wird.
quelle
Rückschritt beim Debuggen als Motivation für Nichtdeterminismus
Der Begriff einer nicht-deterministischen Maschine bietet sich an, wenn Sie während des Debuggens (in der Zeit) einen Rückschritt durch ein Programm machen möchten. In einem typischen Computer ändert jeder Schritt nur eine begrenzte Menge an Speicher. Wenn Sie diese Informationen immer für die vorherigen 10000 Schritte speichern, können Sie im Programm problemlos vorwärts und rückwärts springen, und diese Möglichkeit ist nicht auf Spielzeugprogramme beschränkt. Wenn Sie versuchen, die Asymmetrie zwischen Vorwärts- und Rückwärtsschritten zu beseitigen, erhalten Sie den Begriff einer nicht deterministischen Maschine.
Ähnlichkeiten und Unterschiede zwischen Nichtdeterminismus und Zufälligkeit
Während probabilistische Maschinen einige Merkmale mit nicht deterministischen Maschinen teilen, wird diese Symmetrie zwischen Vorwärts- und Rückwärtsschritten nicht geteilt. Um dies zu sehen, modellieren wir die Schritte oder Übergänge einer deterministischen Maschine durch (vollständige oder teilweise) Funktionen, die Übergänge einer nicht deterministischen Maschine durch (endliche) Beziehungen und die Übergänge einer probabilistischen Maschine durch (sub) stochastische Matrizen . Zum Beispiel sind hier entsprechende Definitionen für endliche Automaten
Es gibt viele verschiedene angemessene Annahmebedingungen
Die Übergänge sind nur ein Teil einer Maschine, Anfangs- und Endzustände, mögliche Ausgabe- und Abnahmebedingungen sind ebenfalls wichtig. Es gibt jedoch nur sehr wenige nicht äquivalente Annahmebedingungen für deterministische Maschinen, eine Reihe angemessener Annahmebedingungen für nicht deterministische Maschinen (NP, coNP, #P, ...) und viele mögliche Annahmebedingungen für probabilistische Maschinen. Daher konzentriert sich diese Antwort in erster Linie auf die Übergänge.
Die Reversibilität ist für Wahrscheinlichkeitsmaschinen nicht trivial
Die Reversibilität ist selbst für nicht deterministische Maschinen schwierig
Diese Überlegungen sind auch für Pushdown-Automaten sinnvoll
Dieser Beitrag legt nahe, dass eine Motivation für Nichtdeterminismus darin besteht, diese Asymmetrie zwischen Vorwärts- und Rückwärtsschritten zu beseitigen. Ist diese Symmetrie des Nichtdeterminismus auf endliche Automaten beschränkt? Hier finden Sie entsprechende symmetrische Definitionen für Pushdown-Automaten
Verifizierung der Umkehrung für (nicht) fortschreitende Eingabe- und Stapeloperationen
Hier ist ein Diagramm einer fortschreitenden Eingabeoperation, deren Umkehrung schlecht aussehen würde
Für eine Stapeloperation gibt es die drei Fälle , und . Die Stapeloperation wird wie folgt in umgekehrt(s,t)∈Γ{0,1}×Γ{0,1} (s,t)=(a,ϵ) (s,t)=(ϵ,a) (s,t)=(a,b) (a,ϵ) (ϵ,a)
Die Stapeloperation wird wie folgt zu umgekehrt(a,b) (b,a)
Eine verallgemeinerte würde umgekehrt werden zu(ab,cde)∈Γ∗×Γ∗ (cde,ab)
Reversibilität für Turingmaschinen
Eine Maschine mit mehr als einem Stapel entspricht einer Turing-Maschine, und Stapelvorgänge können leicht umgekehrt werden. Die Motivation am Anfang legt auch nahe, dass das Umkehren (einer Turing-Maschine) nicht schwierig sein sollte. Eine Turingmaschine mit einem typischen Befehlssatz eignet sich nicht so gut zum Umkehren, da das Symbol unter dem Kopf beeinflussen kann, ob sich das Band nach links oder rechts bewegt. Wenn der Befehlssatz jedoch entsprechend geändert wird (ohne die Rechenleistung der Maschine zu verringern), ist die Umkehrung wieder nahezu trivial.
Eine Umkehrung kann auch ohne Änderung des Befehlssatzes erstellt werden, ist jedoch nicht kanonisch und ein bisschen hässlich. Es mag den Anschein haben, dass die Existenz einer Umkehrung genauso schwierig zu entscheiden ist wie viele andere Fragen, die sich auf Turing-Maschinen beziehen. Eine Umkehrung ist jedoch eine lokale Konstruktion, und die schwierigen Fragen haben oft einen globalen Charakter, weshalb Pessimismus hier wahrscheinlich ungerechtfertigt wäre.
Der Drang, zu äquivalenten Anweisungssätzen zu wechseln (einfacher umzukehren), zeigt, dass diese Fragen weniger offensichtlich sind, als sie zuerst erscheinen. Ein subtilerer Wechsel geschah in diesem Beitrag zuvor, als Gesamtfunktionen und stochastische Matrizen durch Teilfunktionen und substochastische Matrizen ersetzt wurden. Dieser Schalter ist nicht unbedingt erforderlich, aber die Umkehrung ist ansonsten hässlich. Der Wechsel zu den substochastischen Matrizen war tatsächlich der Punkt, an dem sich herausstellte, dass Reversibilität doch nicht so trivial ist und dass man Details (wie oben beschrieben) aufschreiben sollte, anstatt nur eine übergeordnete Perspektive einzunehmen (wie in der Begründung unter dargestellt) der Anfang). Die von Niel de Beaudrap aufgeworfenen Fragen trugen auch zur Erkenntnis bei, dass die Perspektive auf hoher Ebene leicht wackelig ist.
Fazit
Nicht deterministische Maschinen erlauben eine endliche Anzahl deterministischer Übergänge bei jedem Schritt. Für probabilistische Maschinen haben diese Übergänge zusätzlich eine Wahrscheinlichkeit. Dieser Beitrag vermittelt eine andere Perspektive auf Nichtdeterminismus und Zufälligkeit. Ignoriert man die globalen Akzeptanzbedingungen, konzentriert man sich stattdessen auf die lokale Reversibilität (als lokale Symmetrie). Da die Zufälligkeit einige lokale Symmetrien beibehält, die nicht durch den Determinismus erhalten bleiben, zeigt diese Perspektive nicht-triviale Unterschiede zwischen nicht-deterministischen und probabilistischen Maschinen.
quelle
Im Kontext von Turing Machines ( TMs ) und der Automatentheorie ist eine nicht deterministische Maschine eine Maschine, in der jede Instanziierung der Maschine, die akzeptiert, in Ordnung ist. In diesem Sinne ist es so , als würden Sie mehrere deterministische Maschinen parallel ausführen und die Ausgabe aller Instanzen übernehmen, die die Eingabe akzeptieren . Tatsächlich gibt es einen (deterministischen) Algorithmus, um jeden nicht deterministischen Automaten (mit Zuständen) in einen äquivalenten deterministischen Automaten (mit ) umzuwandeln2 nn 2n Zustände, exponentiell) durch Berücksichtigung von Äquivalenzklassen von Zuständen, unabhängig davon, ob der in der Maschine implementierte Algorithmus eine Randomisierung oder Wahrscheinlichkeiten beinhaltet (siehe unten).
Wenn der in der Maschine implementierte Algorithmus jedoch eine Randomisierung oder Wahrscheinlichkeiten enthält (die dem Algorithmus eigen sind), handelt es sich um eine randomisierte (oder probabilistische) Maschine.
Im Allgemeinen ist es immer möglich, Nicht-Determinismus aus einer Maschine zu entfernen und ein deterministisches Äquivalent zu konstruieren (siehe Algorithmus oben), aber dasselbe kann (im Allgemeinen) nicht getan werden, um die Randomisierung zu entfernen (im Kontext des oben Gesagten), weil es so ist dem implementierten Algorithmus innewohnend .
Man beachte, dass im Lichte des Vorstehenden sowohl eine deterministische Maschine als auch eine nicht deterministische Maschine probabilistisch sein können, wenn der (beteiligte) Algorithmus auf diese Weise Randomisierung (oder Wahrscheinlichkeiten) verwendet.
Zusammenfassend bezieht sich Nichtdeterminismus in Automaten (in diesem Zusammenhang) auf Klassen ähnlicher Automaten, während sich Randomisierungs- oder Wahrscheinlichkeitsmaschinen auf die (intrinsische Anwendung der Randomisierung in den) tatsächlichen Algorithmen beziehen, die von diesen Automaten implementiert werden.
quelle