Leerheitsproblem

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Als Leerheitsproblem bezeichnet man in der theoretischen Informatik das Problem, zu entscheiden, ob eine in Form einer formalen Grammatik gegebene formale Sprache leer ist, also , oder nicht. Das Problem ist also, herauszufinden, ob es Wörter gibt, die den Regeln der Grammatik genügen, oder nicht.

Die Entscheidbarkeit des Leerheitsproblems hängt von der Komplexität der zugrundeliegenden Grammatik ab: Für die Grammatiken vom Typ 2 oder höher in der Chomsky-Hierarchie ist das Leerheitsproblem entscheidbar, für die Grammatiken bis Typ 1 im Allgemeinen jedoch nicht.

Leerheitsproblem für endliche Automaten

[Bearbeiten | Quelltext bearbeiten]

Gegeben ist ein (nicht-)deterministischer endlicher Automat A. Es soll entschieden werden, ob die formale Sprache ist oder nicht.

Gesucht ist ein Algorithmus zur Lösung des Leerheitsproblems.

Man überprüft alle Wörter w (mit Länge ≤ Zustandsanzahl des Automaten), ob diese von A erkannt werden. Wird ein Wort erkannt, so gilt , ansonsten ist die Sprache leer.

Der Ansatz ist für Alphabete mit mehr als einem Symbol und größere Automaten in der Praxis nicht einsetzbar – der Zeitbedarf ist exponentiell ().

Markierungsalgorithmus

[Bearbeiten | Quelltext bearbeiten]

Der Markierungsalgorithmus betrachtet einen endlichen Automaten als gerichteten Graphen G=(Q,E). Q-Elemente heißen Knoten und E-Elemente Kanten. Wenn ein Wort w in L(A) existiert, gibt es einen Pfad vom Startzustand in den Endzustand des Automaten. Es wird nun überprüft, ob ein markierter Zustand des Graphen ein Endzustand des Automaten ist.

Beginnend vom Startzustand p1: p1 wird markiert und in die Liste der markierten Zustände aufgenommen. Dann wird überprüft, welche Zustände von p1 erreichbar sind. Markiere diese Zustände und füge p2, p3 … in die Liste ein und streiche p1 aus der Liste. Dies wird so lange wiederholt, bis alle zu erreichenden Zustände markiert sind und die Schlange leer ist. Ist kein Endzustand erreicht (und somit nicht markiert), gilt, dass die Sprache leer ist.

Der Algorithmus fügt jeden Knoten maximal einmal in die Liste hinzu und markiert ihn. Somit terminiert der Algorithmus im Zeitaufwand von n².

Leerheitsproblem für Grammatiken

[Bearbeiten | Quelltext bearbeiten]

Bei dem Leerheitsproblem für eine Grammatik G ist die Frage, ob G eine leere Sprache erzeugt oder nicht.

Lösung über den Markierungsalgorithmus: Dabei werden die Symbole der Regeln markiert, aus denen ein Terminalwort ableitbar ist. Ist das Startsymbol markiert, dann ist die Sprache nicht leer.