Ein nichtdeterministischer Automat ist, informell ausgedrückt, wie ein deterministischer
Automat,
nur dass es für eine Zustand-Symbol-Kombination beliebig viele ausgehende Pfeile (eventuell gar
keinen)
geben kann. Hier ist das Beispiel von vorhin, leicht abgewandelt:
Ein Pfeil beschreibt also nicht unbedingt einen Zustandsübergang, der geschieht,
sondern einen, der möglich ist.
Formal gesprochen ist nun keine Funktion mehr, sondern eine Relation:
Definition 5.3.1(Nichtdeterministischer endlicher Automat, non-deterministic finite state
machine)
Ein nichtdeterministischer endlicher Automat besteht aus
einem endlichen Eingabealphaet ,
einer endlichen
Menge von Zuständen,
einem Startzustand ,
einer Menge von akzeptierenden Endzuständen,
einer Zustandsübergangsrelation .
Formal gesehen ist also ein Automat ein Quintupel .
Von nun an bezeichnen wir endliche Automaten auch als deterministische endliche Automaten,
um den Unterschied zu den nichtdeterministischen zu verdeutlichen. Wenn in einem
deterministischen endlichen Automaten war, so hatte das die Bedeutung
wenn der Automat im Zustand ist und liest, so geht er in Zustand über;
wenn nun in einem nichtdeterministischen Automaten gilt, so bedeutet das,
wenn der Automat im Zustand ist und liest, so kann er in Zustand
übergehen.
Analog zu den deterministischen Automaten definieren wir eine erweiterte Zustandsübergangsrelation.
Definition 5.3.2(Erweiterte Zuständsübergangsfunktion).
Für einen nichtdeterministischen endlichen Automaten
definieren
wir
die erweiterte Zustandsübergangsrelation als die Menge aller Zustand-Wort-Zustand-Tripel , für die
wir Zwischenzustände finden können mit
Dies schließt den Fall mit ein, also .
Wie zuvor schreiben wir .
Die von akzeptierte Sprache ist
Beobachtung 5.3.3
Sei ein nichtdeterministischer endlicher Automat.
Dann gibt es eine reguläre Grammatik mit .
Wir führen hier den Beweis nicht noch einmal; er ist mehr oder weniger identisch mit dem Beweis
von Theorem 4.2.5; wir
haben nämlich
in jenem Beweis nirgends verwendet, dass eine Funktion ist, und daher geht
mit einem , das eine Relation ist, alles ganz genau gleich. Allerdings gilt
nun
auch der Umkehrschluss: zu einer regulären Grammatik gibt es einen nichtdeterministischen
endlichen Automaten:
Theorem 5.3.4
Sei eine reguläre Grammatik. Dann gibt es einen nichtdeterministischen
endlichen Automaten
mit .
Beweis.
Unser Automat hat als Zustandsmenge , die Menge der nichtterminalen Symbole und als
Startzustand
, das Startsymbol der Grammatik .
Wir definieren , indem wir jeden -Pfeil in einem -Pfeil umwandeln:
eine Produktion
in wird dann zu
also einem Pfeil in .
Für jede Regel der Form machen wir zu einem Endzustand.
Was aber mit Regeln der Form
? Hierfür könnte man Nichtdeterministische Automaten mit
-Übergängen definieren,
die also vom Zustand nach wechseln können, ohne ein Eingabesymbol zu lesen; wir
gehen hier einen anderen Weg und
verweisen auf Theorem
4.1.7, welches
uns erlaubt, Regeln der Form und zu eliminieren.
Wir sehen nun, dass dies genau der nichtdeterministische Automat ist, den wir nach Theorem 4.3.4
bauen können. Die Zustandsübergangsrelation ist
Jeder Zustand ist ein Endzustand, allerdings heißt das nicht, dass der Automat jedes Wort
akzeptiert.
Für beispielsweise gibt es keinen Zustand mit , geschweige
denn einen akzeptierenden Endzustand. Daher gilt: .
Bevor wir einen nichtdeterministischen Automaten bauen können, müssen wir erst die
Produktionen der Form
eliminieren bzw. ersetzen. Wenn Sie Aufgabe 4.1.7 gelöst haben, haben
Sie wahrscheinlich in etwa folgende
Grammatik erhalten:
Also insgesamt 11 statt 8 Produktionen. Alle Nichtterminale erlauben auf ihrer rechten Seite ein
und werden
so zu akzeptierenden Zuständen. Die Zustandsübergangsrelation ist also
Der nichtdeterminische Automat schaut also so aus:
Übungsaufgabe 5.3.1
Sei und .
Schreiben Sie für
einen deterministischen endlichen Automaten.
Schreiben Sie eine reguläre Grammatik für die Sprache , also
die Strings aus 1, deren Länge durch 5 oder durch 7 teilbar ist.
Zeichnen Sie nun einen nichtdeterministischen endlichen Automaten für .
Wir werden nun zeigen, dass man zu jedem nichtdeterministischen Automaten einen
äquivalenten deterministischen Automaten bauen kann. Bevor wir eine allgemeine
Konstruktion zeigen, fragen wir uns, wie wir beispielsweise für den nichtdeterministischen
endlichen
Automaten :
und das Eingabewort überprüfen können, ob gilt.
Einem determinischen endlichen Automaten können wir ja das Eingabewort einfach füttern und
schauen,
was der Automat tut; bei nichtdeterministischen Automaten müssen wir schauen, was er alles
tun könnte. Wir plazieren einen kleinen farbigen Punkt in jeden Zustand, in dem sich der Automat
befinden könnte; am Anfang hat der Startzustand einen roten Punkt.
Am Ende landet der grüne Punkt im Zustand . Das Wort ist also in . Das können wir
auch ganz allgemein tun. Wenn Zustand einen "Punkt" hat und Zeichen gelesen wird,
dann teilt sich dieser Punkt und plaziert einen Kind-Punkt in jedem Zustand , für
den gilt. Formal gesprochen: für eine Menge
von Zuständen (die, die gerade einen "Punkt" haben) und ein Eingabe-Symbol
definieren wir
Für ein Eingabewort fangen wir nun mit an, das
entspricht dem einen roten
Punkt auf dem Startzustand, und berechnen dann jeweils ; wenn
die Menge einen akzeptierenden Endzustand enthält (dieser also am Ende einen "Punkt"
hat), gilt
.
Treten Sie einen Schritt zurück und betrachten, was wir mit definiert haben: wir
haben eine
Zustandsübergangsfunktion definiert, die nun aber nicht auf Zuständen sondern auf
Zustandsmengen operiert. Das heißt,
im Gegensatz zu , das eine Funktion ist, ist
Wenn Sie die Schreibweise nicht kennen: dies ist die Potenzmenge von , also die
Menge aller
Untermengen, was die leere Menge und die "volle Menge" selbst
miteinschließt. Wir haben
also folgendes Theorem:
Theorem 5.3.7(Einen nichtdeterministischen endlichen Automaten deterministisch machen).
Sei ein nichtdeterministischer Automat; dann
heiße der deterministische Automat
mit Endzustandsmenge
definiert als
und Zustandsübergangsfunktion definiert als
der Potenzmengenautomat. Es gilt .
Wir folgern also
Theorem 5.3.8
Zu jeder regulären Sprache gibt es einen deterministischen endlichen Automaten
mit .
Beispiel 5.3.9
Der obige nichtdeterminische Automaten , der die Sprache aller Wörter, deren viertletztes
Zeichen eine 1 ist, akzeptiert,
hat fünf Zustände. Sein
Potenzmengenautomat hätte also . Allerdings sehen wir, dass alle "relevanten"
Zustände von
den Zustand enthalten. Dieser wird nie verschwinden. Also sehen wir, dass man mit
16 Zuständen implementieren
kann (die anderen, die, die nicht enthalten, sind unerreichbar). Da 16 immer noch
recht groß für
eine Abbildung ist, nehmen wir uns die Sprache aller Wörter, deren drittletztes Zeichen
eine 1 ist.
Der nichtdeterministische Automat hierfür ist
Der Potenzmengenautomat hat die Zustandsmenge
wobei wir der Lesbarkeit halber statt etc. schreiben. Um bei der
Konstruktion
des
Potenzmengenautomaten unnötige Zustände zu vermeiden, bauen wir ihn Schritt für Schritt,
angefangen
mit dem Startzustand bzw. , und hängen jedem Zustand einen ausgehenden
-Pfeil und
-Pfeil an, wobei wir womöglich neue Zustände "entdecken".
Wenn wir uns vorstellen, dass wir vor das Eingabewort die Zeichen 000 stellen,
also durch ersetzen,
dann codiert jeder Zustand genau die letzten drei Zeichen des Eingabewortes, die der
Automat gelesen hat. Der Zustand bedeutet zum Beispiel die letzten drei Zeichen
waren
Im folgenden Unterkapitel werden wir alle Transformationen, die wir bisher gesehen haben,
an einem konkreten Beispiel anwenden.