Cocke-Younger-Kasami-Algorithmus
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 .