Automat (Informatik)
Ein Automat ist in der Informatik eine gedachte Maschine (also abstrakte Modelle von Maschinen), die sich gemäß bestimmter Regeln (nach einem Programm) verhält. Sie dienen in der Theoretischen Informatik als Konstrukt, um gewisse Eigenschaften von Problemen und Algorithmen zu analysieren und zu beweisen. Dabei sind die Automaten meistens möglichst einfach strukturiert, so dass sich leicht mit ihnen Argumentieren lässt - ob es tatsächleich möglich oder sinnvoll wäre, eine soche Maschine zu bauen, ist dabei zunächst unerheblich.
Die Automaten sind meist ähnlich aufgebaut: Der Automat hat einen inneren Zustand und bekommt eine Eingabe, die (meistens) Zeichen für Zeichen gelesen werden. Eine Zustandsübergangstabelle definiert, abhängig vom aktuellen Zustand un dem gerade gelesenen Zeichen, den nächsten Zustand.
Automaten werden unter anderem in deterministische und nichtdeterministische unterschieden. Dabei ist bei nichtdeterministische Automaten nicht eindeutig vorherbestimmt, welcher Zustand auf welchen Anderen folgt - der Automat kann so effektiv raten. Dabei gilt ein Problem schon dann durch einen nichtdeterministische Automaten gelöst, wenn er das Ergebnis in dem Fall findet, dass er immer richtig rät. Oder man könnte sagen, ein solcher Automat würde alle Möglichkeiten parallel probieren.
Bekannte Typen von Automaten sind (jeweils in deterministischer und nichtdeterministischer Variante):
- Endliche Automaten: akzeptieren die Reguläre Sprachen
- Kellerautomaten: akzeptieren die Kontextfreie Sprachen
- Turingmaschinen: definieren den Begriff der Berechenbarkeit. Siehe Churchsche These.
- 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 sind:
Von praktische Relevanz in der 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 zum Beispiel sie zur Implementation von Parsern eingesetzt, die Umsetzungngen 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 englicher Automat ausdrücken, und das Workflow Management benutzt diese Konzepte zur Modellierung von Arbeitsabläufen.
Siehe auch: Automatentheorie, Berechenbarkeitstheorie, Komplexitätstheorie