Ja, Sie sind richtig, Computer sind deterministisch zu automatisieren. Nicht-deterministische Modelle sind für theoretische Zwecke nützlicher, manchmal ist die deterministische Lösung für die Definition (oder etwa die Problemstellung) nicht so offensichtlich und so wenig schwer zu finden. Dann besteht ein Ansatz darin, zuerst ein nicht deterministisches Modell zu entwerfen, das vergleichsweise einfach zu entwerfen ist, und dann zu versuchen, es in ein deterministisches Modell umzuwandeln. Im Folgenden habe ich versucht, anhand eines Beispiels zu demonstrieren, was ich meine. Betrachten Sie den regulären Ausdruck:
(01)*01(0 + 1)*
Angenommen, Sie werden aufgefordert, DFA für die von RE oben generierte Sprache zu zeichnen.
Mit meinem Wissen FAs die Gestaltung, weiß ich , dass (1) , wenn ein *
in regulärem Ausdruck angegeben Ich brauche entsprechende Schleife in FA (2) verketten Operationen wie a.b
Mittel so etwas wie: .(q0)─a→(q1)─b→(q2)
Also, bei meinem ersten Versuch würde ich eine NFA zeichnen wie:
Dachte, dies ist keine deterministische Lösung, sondern sieht sehr einfach aus FA, die leicht unter Verwendung des gegebenen regulären Ausdrucks entworfen werden kann. Meine Art von Analogie, Ähnlichkeit zwischen dem obigen regulären Ausdruck und meiner NFA zu zeigen, ist wie folgt:
- Die Schleife im Zustand q 0 sollte für sein
(01)*
01
(nach (01)*
) gibt(q0)─0→(q1)─1→(q2)
(0 + 1)*
gibt eine Selbstschleife im Zustand q 2 für das Label 0, 1
Nach meiner Analogie ist der FA, den ich oben gezeichnet habe, vergleichsweise einfach aus dem gegebenen RE zu ziehen. Und zum Glück kann in der Klasse der endlichen Automaten jedes nicht deterministische Modell in ein äquivalentes deterministisches Modell umgewandelt werden. Wir haben eine algorithmische Methode, um eine NFA in eine DFA umzuwandeln . So kann ich problemlos über NFA in einen DFA konvertieren:
Zum anderen ist es leider nicht immer möglich, ein nicht deterministisches Modell in ein deterministisches zu konvertieren. Beispielsweise ist die Klasse für deterministische Push-Down-Automatisierung eine Teilmenge der Klasse für deterministische Push-Down-Automatisierung "check venn diagram ", und Sie können nicht immer konvertieren eine NPDA in einen PDA.
Wenn es normalerweise nicht möglich ist, eine nicht deterministische Lösung in eine deterministische Lösung umzuwandeln, definieren wir die deterministische Lösung mit Hilfe der nicht deterministischen Lösung in der Unterdomäne (oder Teildomäne) anstelle der vollständigen Domäne. Oder wir definieren die Lösung auf andere Weise (z. B. gierige Vorgehensweise), die Ihnen möglicherweise nicht die optimale Lösung bietet .
Manchmal ist Nicht-Determinismus ein effektiver Mechanismus, um ein kompliziertes Problem / eine komplizierte Lösung präzise und effektiv zu beschreiben. Beispielsweise können nicht-deterministische Maschinen als Modell für Such- und Rückverfolgungsalgorithmen dienen (siehe: Wie Zeichenfolgen im nicht-deterministischen Modell mithilfe von Rückverfolgung verarbeitet werden) ). Entgegengesetzt deterministische Modelle stehen besser für effiziente, minimierte und weniger redundante Lösungen.
Hier möchte ich auch aus Wikipedia zitieren Verwendung eines nicht deterministischen Algorithmus :
Beim Algorithmusdesign werden häufig nicht deterministische Algorithmen verwendet, wenn das durch den Algorithmus gelöste Problem von Natur aus mehrere Ergebnisse zulässt (oder wenn es ein einzelnes Ergebnis mit mehreren Pfaden gibt, auf denen das Ergebnis entdeckt werden kann, wobei jeder gleichermaßen vorzuziehen ist). Entscheidend ist, dass jedes Ergebnis des nicht deterministischen Algorithmus gültig ist, unabhängig davon, welche Auswahl der Algorithmus während der Ausführung trifft.
Eine große Anzahl von Problemen kann durch nichtdeterministische Algorithmen konzeptualisiert werden, einschließlich der berühmtesten ungelösten Frage in der Computertheorie, P vs NP.
Wie @keshlam auch in seinem Kommentar erwähnte : "Nichtdeterminismus" wird in der Praxis verwendet, um auf jede Unvorhersehbarkeit im Ergebnis eines Prozesses hinzuweisen . Beispiel: Gleichzeitige Programme weisen ein nicht deterministisches Verhalten auf. Zwei Ausführungen desselben Programms mit derselben Eingabe können zu unterschiedlichen Ergebnissen führen (wenn kein Mechanismus zur Steuerung der Gleichzeitigkeit angewendet wird). Lesen Sie mehr darüber in "Nützlichkeit des Nicht-Determinismus" .
Ich würde Ihnen auch empfehlen, die folgenden Links zu lesen:
1. Was ist der Unterschied zwischen Nichtdeterminismus und Zufälligkeit?
2. 9.2.2 Nichtdeterministische vs. probabilistische Modelle: (a). Nicht deterministisch: Ich habe keine Ahnung, was die Natur tun wird. (b). Probabilistisch: Ich habe die Natur beobachtet und Statistiken gesammelt.
3. Nichtdeterministische Programmierung