Automat (Informatik)
aus Wikipedia, der freien Enzyklopädie
Ein Automat ist in der Informatik eine gedachte Maschine (also ein abstraktes Modell einer Maschine), die sich gemäß bestimmter Regeln (nach einem Programm) verhält. Automaten dienen in der Theoretischen Informatik als Konstrukt, um gewisse Eigenschaften von Problemen und Algorithmen zu analysieren und zu beweisen. Dabei werden die Automaten auf ihre grundlegenden Eigenschaften reduziert. – Ob es tatsächlich möglich oder sinnvoll wäre, eine solche Maschine zu bauen, ist dabei zunächst unerheblich. Die Vereinfachung der Fähigkeiten erlaubt es, das Verhalten eines Automaten leichter zu verstehen und zu vergleichen. Die Übertragung dieser Ergebnisse ist grundlegend für verschiedene Bereiche der Praktischen Informatik. Ein Beispiel dafür ist der Compilerbau.
Die Automaten sind meist ähnlich aufgebaut: Der Automat hat einen inneren Zustand und bekommt eine Eingabe, die (meistens) Zeichen für Zeichen gelesen wird. Eine Zustandsübergangstabelle definiert, abhängig vom aktuellen Zustand und dem gerade gelesenen Zeichen, den nächsten Zustand.
Automaten werden unter anderem in deterministische und nichtdeterministische unterschieden. Dabei ist bei nichtdeterministischen Automaten nicht eindeutig vorherbestimmt, welcher Zustand auf welchen anderen folgt.
Bekannte Typen von Automaten sind (jeweils in deterministischer und nichtdeterministischer Variante):
- Endliche Automaten: akzeptieren die Typ-3-Sprachen (Reguläre Sprachen)
- Kellerautomaten: akzeptieren die Typ-2-Sprachen (Kontextfreie Sprachen)
- Turingmaschinen: akzeptieren die Typ-0-Sprachen (und damit auch Typ-1-Sprachen). Durch die Turingmaschine wird außerdem der Begriff der Berechenbarkeit definiert. Siehe Churchsche These.
- Zweikellerautomat: ohne Einschränkung der Turingmaschine gleichwertig. Syntaktische Beschränkungen dieses Modells führen zur Charakterisierung der Typ-1- und Typ-2-Sprachen.
- Registermaschinen: sind genau so mächtig wie Turingmaschinen, bieten aber in einigen Fällen ein besseres Maß für die Zeitkomplexität.
Daneben gibt es weitere Automatentypen, die sich nicht am sequentiellen Einlesen einer Eingabe orientieren. Einige der bekannteren Automaten sind:
Von praktischer Relevanz für die Programmierung sind vor allem Endliche Automaten und Kellerautomaten: sie bieten eine einfache Struktur, mit der sich viele komplexe Probleme übersichtlich lösen lassen. Im Compilerbau werden sie beispielsweise zur Implementierung von Parsern eingesetzt, die Umsetzungen von Netzwerkprotokollen benutzen häufig einen endlichen Automaten, um ihren aktuellen Zustand zu modellieren. Auch die Navigationsmöglichkeiten in einem Wizard lassen sich sehr gut als endlicher Automat ausdrücken, und das Workflow Management benutzt diese Konzepte zur Modellierung von Arbeitsabläufen.
Auch bei der Realisierung sequenzieller Hardware wird das Modell des Endlichen Automaten genutzt, dort meist als Finite State Machine (FSM) bezeichnet.