Zum Inhalt springen

Cocke-Younger-Kasami-Algorithmus

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 11. Juli 2007 um 18:58 Uhr durch STBot~dewiki (Diskussion | Beiträge) (Bot: Ergänze: es:Algoritmo CYK). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Der Cocke-Younger-Kasami-Algorithmus (CYK-Algorithmus) ist ein Algorithmus aus dem Gebiet der Theoretischen Informatik. Mit ihm lässt sich feststellen, ob ein Wort zu einer bestimmten kontextfreien Sprache gehört. In der Fachsprache bezeichnet man dies als Lösen des Wortproblems für kontextfreie Sprachen. Um den Algorithmus anzuwenden, muss zu der vorgegebenen Sprache eine Grammatik in Chomsky-Normalform vorliegen.

Der CYK-Algorithmus nutzt das Prinzip der dynamischen Programmierung. Im ersten Schritt ermittelt er, aus welchen Symbolen sich die einstelligen Teilworte (Buchstaben) des vorgegebenen Wortes erzeugen lassen. In jedem weiteren Schritt wird dann ermittelt aus welchen Symbolen sich die 2-stelligen, 3-stelligen ... Teilworte erzeugen lassen. Dabei benutzt man die Ergebnisse der vorhergegangenen Schritte. Im letzten Schritt erhält man die Symbole, aus denen sich das n-stellige Teilwort, das dem ursprünglichen Wort entspricht, erzeugen lässt. Wenn sich darunter das Startsymbol befindet, dann lässt sich das vorgegebene Wort durch die Grammatik erzeugen. Das ist gleichbedeutend damit, dass dieses Wort zur durch die Grammatik repräsentierten Sprache gehört. Andernfalls ist dies nicht möglich.

Beispiel

Die Fragestellung lautet, ob sich das Wort durch die Grammatik erzeugen lässt. Die Produktionen der Grammatik seien:

Den Algorithmus kann man mittels einer Tabelle durchführen. Dabei steht in der i. Spalte und j. Zeile, aus welchen Symbolen sich das Teilwort ableiten lässt.

j=6 S,A S,A S,A - B A,C
j=5 B B B S,A A,C
j=4 S,C S,C S,C B
j=3 A S,A A,C
j=2 - B
j=1 B
i 1 2 3 4 5 6
ai b b a b a a

Wenn sich am Ende das Startsymbol in der oberen linken Ecke befindet, lässt sich das gegebene Wort (wie hier) aus S ableiten und damit durch die Grammatik erzeugen.

Algorithmus

Im Folgenden ist jeweils die Menge aller Variablen aus denen das Teilwort erzeugt werden kann. Im obigen Beispiel ist beispielsweise , da das Teilwort aus den Symbolen und erzeugt werden kann:

Als Eingabe erhält der Algorithmus eine kontextfreie Grammatik in Chomsky-Normalform und das zu prüfende Wort.

Im ersten Schritt bestimmt der Algorithmus alle Mengen der aus einem Buchstaben bestehenden Teilworte. Im Beispiel: , da das Teilwort nur aus dem Symbol durch die Ableitung erzeugt werden kann.

Der Algorithmus bestimmt für jedes , jedes und jede Variable , ob sich das (Teil-) Wort aus ableiten lässt; d.h., ob gilt. Dabei ist das (Teil-) Wort von , das die Buchstaben vom Index bis zum Index enthält.

Für gilt:

Für gilt:

Komplexität

Der Algorithmus entscheidet, in Landau-Notation ausgedrückt, in , ob ein Wort der Länge in der in Chomsky-Normalform gegebenen Sprache liegt. Dabei benötigt er Speicherplatz in der Größenordnung .