Automaten und zustandsorientierte Modellierung
Eine Medientaste „Play/Pause“ tut je nach Lage etwas anderes: Steht die Wiedergabe, startet sie, läuft sie, hält sie an. Das Gerät muss sich also merken, in welcher Lage es ist. Es braucht dafür aber kein Gedächtnis für alles, was je geschah, sondern nur für wenige Lagen.
Ebenso ein Programm, das einen Text auf das Teilwort „ab“ prüft: Es liest Zeichen für Zeichen und muss sich nur merken, wie weit es im Muster ist. Solche Aufgaben beschreibt man mit endlichen Automaten. Aus der Mittelstufe kennst du Zustandsgraph und Automatentafel. Hier wird das Modell genau, und du erfährst, was es kann und was nicht.
Zustand, Zustandsübergang, Zustandsdiagramm und Übergangstabelle
Ein Zustand fasst zusammen, was sich das System über die Vergangenheit merken muss. Ein Zustandsübergang ist der Wechsel in einen anderen (oder denselben) Zustand, ausgelöst durch ein Eingabezeichen. Im Zustandsdiagramm sind Zustände Kreise und Übergänge Pfeile, die mit dem auslösenden Zeichen beschriftet sind. Ein Pfeil von außen markiert den Startzustand, ein Doppelkreis einen Endzustand. Die Zustandsübergangstabelle enthält dieselbe Information: eine Zeile je Zustand, eine Spalte je Zeichen, im Feld der Folgezustand.
Deterministischer endlicher Automat und Akzeptor
Ein deterministischer endlicher Automat (DFA) ist ein Tupel . Dabei ist Q die endliche Menge der Zustände, das Eingabealphabet, die Übergangsfunktion, der Startzustand und die Menge der Endzustände. „Deterministisch“ heißt: Zu jedem Zustand und jedem Zeichen gibt es genau einen Folgezustand.
Als Akzeptor liest der Automat ein Wort von links nach rechts, beginnend in . Steht er nach dem letzten Zeichen in einem Endzustand, akzeptiert er das Wort, sonst lehnt er es ab. Die Menge aller akzeptierten Wörter ist die erkannte Sprache .
Keine zwei Einsen hintereinander
Keine zwei Einsen hintereinander
Ein Akzeptor über soll genau die Wörter akzeptieren, in denen nie zwei Einsen direkt aufeinander folgen. Zustände: q0 (das letzte Zeichen war keine 1, oder es gab noch keines), q1 (das letzte Zeichen war eine 1) und q_tot (zwei Einsen kamen vor, ein Fangzustand, der nie verlassen wird). Endzustände sind q0 und q1.
| Zustand | liest 0 | liest 1 |
|---|---|---|
| q0 | q0 | q1 |
| q1 | q0 | q_tot |
| q_tot | q_tot | q_tot |
Prüfe die Wörter 10101 und 0110.
10101: Start in q0. Die 1 führt nach q1, die 0 nach q0, die 1 nach q1, die 0 nach q0, die 1 nach q1. Der Automat steht in q1, einem Endzustand: akzeptiert.
0110: q0, dann 0 nach q0, 1 nach q1, 1 nach q_tot, 0 bleibt in q_tot. q_tot ist kein Endzustand: abgelehnt.
Mealy-Automat
Ein Mealy-Automat hat keine Endzustände, sondern gibt bei jedem Übergang ein Zeichen aus. Er ist ein Tupel mit dem Ausgabealphabet und der Ausgabefunktion . Im Diagramm steht an jedem Pfeil „Eingabe/Ausgabe“. Er übersetzt ein Eingabewort in ein Ausgabewort gleicher Länge. Der Akzeptor beantwortet also eine Ja-Nein-Frage, der Mealy-Automat berechnet eine Ausgabe.
Änderungen erkennen
Änderungen erkennen
Ein Mealy-Automat gibt 1 aus, wenn das gelesene Bit vom vorigen abweicht, sonst 0. Am Anfang gilt das vorige Bit als 0. Zustände: s0 (voriges Bit 0, Startzustand) und s1 (voriges Bit 1).
| Zustand | Eingabe 0 | Eingabe 1 |
|---|---|---|
| s0 | nach s0, Ausgabe 0 | nach s1, Ausgabe 1 |
| s1 | nach s0, Ausgabe 1 | nach s1, Ausgabe 0 |
Welche Ausgabe entsteht bei der Eingabe 10110?
Start in s0. Die 1 führt nach s1 (Ausgabe 1), die 0 nach s0 (Ausgabe 1), die 1 nach s1 (Ausgabe 1), die nächste 1 bleibt in s1 (Ausgabe 0), die 0 führt nach s0 (Ausgabe 1). Die Ausgabe ist 11101. Probe: Mit dem Anfangsbit 0 weicht jedes Zeichen von 1, 0, 1, 1, 0 vom vorigen ab, nur das vierte nicht (1 nach 1).
Zusammenhang mit regulären Ausdrücken und Grammatiken
Die Sprachen, die ein DFA erkennt, heißen regulär. Nach dem Satz von Kleene sind das genau die Sprachen, die ein regulärer Ausdruck beschreibt: Zu jedem regulären Ausdruck gibt es einen DFA und umgekehrt. Der Ausdruck beschreibt zum Beispiel alle Wörter über mit dem Teilwort ab. Der DFA dazu steht unten bei den Einsatzbereichen. Auch die regulären Grammatiken der nächsten Lektion erzeugen genau diese Sprachen. Ein regulärer Ausdruck beschreibt eine Sprache, ein Automat erkennt sie.
Grenze endlicher Automaten
Kein DFA erkennt die Sprache : erst n-mal a, dann n-mal b. Ein DFA hat nur endlich viele Zustände, also nur endlich viel Gedächtnis. Zählen ohne Obergrenze kann er nicht. Aus demselben Grund kann er nicht prüfen, ob beliebig tief geschachtelte Klammern passen.
Einsatzbereiche: Oberflächen, Protokolle, Substringproblem
Benutzeroberflächen: Die Wirkung einer Eingabe hängt vom Zustand ab. Das Zustandsdiagramm dient als Entwurf: Im Zustand „angehalten“ startet Play die Wiedergabe, im Zustand „läuft“ hält es sie an.
Protokolle: Der Ablauf einer Kommunikation hat Zustände wie „wartet auf Bestätigung“. Nachrichten, die in einem Zustand nicht vorgesehen sind, führen zum Fehler. So lässt sich zum Beispiel der Verbindungsaufbau von TCP beschreiben.
Substringproblem: Kommt ein Muster p als Teilwort in einem Text vor? Der Automat für p hat Zustände. Zustand i bedeutet: Die zuletzt gelesenen Zeichen enden mit den ersten i Zeichen von p, und kein längerer Musteranfang passt. Zustand ist ein Endzustand und wird nicht verlassen. Für über :
| Zustand | liest a | liest b |
|---|---|---|
| 0 | 1 | 0 |
| 1 | 1 | 2 |
| 2 (Endzustand) | 2 | 2 |
Der Text wird einmal von links nach rechts gelesen, ohne zurückzuspringen.
Berühren eines Endzustands genügt
Berühren eines Endzustands genügt
„Der Automat war zwischendurch in einem Endzustand, also wird das Wort akzeptiert.“
Es zählt nur der Zustand nach dem letzten Zeichen. Im Beispiel ohne zwei Einsen ist q0 schon am Anfang ein Endzustand, trotzdem wird 11 abgelehnt, denn der Automat endet in q_tot.
Ein DFA merkt sich alles, was er gelesen hat
Ein DFA merkt sich alles, was er gelesen hat
„Der Automat kann sich merken, wie viele a er gelesen hat.“
Ein DFA kennt nur seinen aktuellen Zustand, und davon gibt es endlich viele. Er kann sich nur eine begrenzte Zusammenfassung des Gelesenen merken, zum Beispiel „das letzte Zeichen war eine 1“, aber keine beliebig große Zahl.
Zusammenfassung
Zustände speichern, was sich ein System merken muss. Das Zustandsdiagramm zeigt Übergänge als beschriftete Pfeile, die Übergangstabelle enthält dieselbe Information.
Ein DFA ist ein Tupel . Als Akzeptor akzeptiert er ein Wort, wenn er nach dem letzten Zeichen in einem Endzustand steht.
Ein Mealy-Automat gibt bei jedem Übergang ein Zeichen aus und übersetzt so Eingabewörter in Ausgabewörter.
DFAs erkennen genau die regulären Sprachen, die auch reguläre Ausdrücke beschreiben (Satz von Kleene).
Ein DFA hat endlich viel Gedächtnis. Deshalb erkennt er und beliebig tief geschachtelte Klammern nicht.
Einsatz: Zustandsabhängige Oberflächen, Protokolle und die Textsuche (Substringproblem mit Zuständen).
Übungen
Der Akzeptor „keine zwei Einsen hintereinander“ liest das Wort 1001. In welchem Zustand steht er danach, und wie lautet das Urteil?
Der Mealy-Automat „Änderungen erkennen“ (Anfangsbit 0) liest das Wort 011010. Wie viele Einsen enthält seine Ausgabe?
Ein Automat soll in einem Text das Muster abcab suchen. Er hat Zustand i für „die letzten gelesenen Zeichen enden mit den ersten i Zeichen des Musters“. Wie viele Zustände braucht er?
Welche Sprache über {a, b} kann kein endlicher Automat erkennen?
Erkläre, warum ein DFA nicht prüfen kann, ob in einem Ausdruck beliebig tief geschachtelte Klammern richtig gesetzt sind.