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. Mit Hilfe von Backtracking kann der Parse-Tree bzw. die Parse-Trees eines gegebenen Wortes der Sprache konstruiert werden. Um den Algorithmus anzuwenden, muss zu der vorgegebenen Sprache eine Grammatik in Chomsky-Normalform vorliegen. Der in den 1960er Jahren von Itiroo Sakai, John Cocke, Tadao Kasami, Jacob Schwartz und Daniel Younger unabhängig voneinander entwickelte Algorithmus nutzt das Prinzip der dynamischen Programmierung.

Beschreibung Bearbeiten

Diese Beschreibung folgt Hopcroft/Ullman (1996).

Als Eingabe erhält der Algorithmus eine kontextfreie Grammatik   in Chomsky-Normalform und das zu prüfende Wort  . Nun wird für jedes Teilwort   (d. h.:   fängt beim Index   an und hat die Länge  ) die Menge der Nichtterminale berechnet, die   erzeugen, bezeichnet durch  .

Gemäß dem Prinzip der dynamischen Programmierung werden erst die   für die kleinsten Teilwörter von   berechnet, abgespeichert und dann zur somit effizienten Berechnung der nächstgrößeren Teilwörter weiterverwendet. Die kleinsten Teilwörter sind einzelne Buchstaben. Da die kontextfreie Grammatik in Chomsky-Normalform gegeben ist, kann jeder Buchstabe nur in genau einem Schritt von einem Nichtterminal abgeleitet werden.

Ein Nichtterminal einer Grammatik in Chomsky-Normalform kann in einem Schritt nicht auf mehrere Terminale abgeleitet werden. Daher kann ein Teilwort  , das mehr als nur ein Zeichen enthält, von   nur über eine Regel   erzeugt werden. Da Nichtterminale nicht das leere Wort (ε) erzeugen können, muss   den linken und   den rechten Teil von   erzeugen. Daraus folgt:

 

Mit anderen Worten:   kann   erzeugen, wenn es gemäß der Produktionsregeln auf   abgeleitet werden kann und   und   wiederum auf   und   abgeleitet werden, also

 .

Das Wortproblem kann nun einfach entschieden werden:   kann genau dann von der Grammatik erzeugt werden, wenn   gilt. In   liegen alle Variablen, die das Teilwort erzeugen können, das beim ersten Buchstaben anfängt und die Länge   hat, also das ganze Wort.

Algorithmus Bearbeiten

Aus der Beschreibung ergibt sich folgender Algorithmus:

Für i = 1 ... n
  Für jede Produktion  
    Falls r =  
      Setze  
Für j = 2 ... n
  Für i = 1 ... n - j + 1
    Für k = 1 ... j - 1
      Setze  
Falls  , stoppe und gib "w wird von G erzeugt" aus
Stoppe und gib "w wird nicht von G erzeugt" aus

Beispiel Bearbeiten

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

 
 
 
 
 
 
 

Den Algorithmus kann man mittels einer Tabelle durchführen. Dabei ist in der  -ten Spalte und  -ten Zeile   gespeichert, also die Menge der Nichtterminalsymbole, aus denen sich das Teilwort ableiten lässt, das beim Index   anfängt und die Länge   hat.

Es gilt  ,  ,  ,  ,  ,  . Aus den Produktionsregeln  ,  ,  ,   folgt  ,  ,  ,  ,  ,  . Das ergibt die erste Zeile der Tabelle:

  1 2 3 4 5 6
1 {A} {B} {C} {A} {B} {D}

Nun wird für jedes   geprüft, ob es Produktionsregeln der Form   gibt, für die das Nichtterminalsymbol   in derselben Spalte der Tabelle oberhalb von   liegt, das Nichtterminalsymbol   in derselben Diagonalen rechts oberhalb von   liegt und außerdem   und   gilt. Aus der Produktionsregel   und den Einträgen  ,  ,  ,   der ersten Zeile folgt  ,  . Das ergibt die zweite Zeile der Tabelle:

  1 2 3 4 5 6
1 {A} {B} {C} {A} {B} {D}
2 {S} {} {} {S} {}

Aus den Produktionsregeln  ,  ,   und den schon jeweils oberhalb vorhandenen Nichtterminalsymbolen ergeben sich die weiteren Zeilen der Tabelle:

  1 2 3 4 5 6
1 {A} {B} {C} {A} {B} {D}
2 {S} {} {} {S} {}
3 {} {} {} {U}
4 {} {} {S}
5 {} {}
6 {S}

Da  , lässt sich das gegebene Wort   unter der Grammatik   aus   ableiten.

Eine Linksableitung des Wortes   wäre demnach:

 

Also ist   ein Wort der Sprache  .

Komplexität Bearbeiten

Der Cocke-Younger-Kasami-Algorithmus entscheidet in der Zeit  , ob ein Wort der Länge   in der Sprache   liegt (vgl. Landau-Symbole zur Beschreibung der Notation). Dabei wird Speicherplatz in der Größenordnung   benötigt, denn jeder Eintrag   der Tabelle benötigt Speicherplatz der Größenordnung  . Die Effizienz hängt entscheidend vom Algorithmus für die Chomsky-Normalform ab, denn nur dann kann der CYK-Algorithmus verwendet werden.[1][2]

Es gibt asymptotisch schnellere Algorithmen. Graham, Harrison und Ruzzo geben eine Variante des Earley-Algorithmus an. Er hat eine Laufzeit von  . Rytter modifiziert diesen Algorithmus weiter und verbessert die Abhängigkeit von der Wortlänge auf  . Aber Valiants Parsing-Methode, die die Berechnungen des Cocke-Younger-Kasami-Algorithmus neu organisiert, ist die asymptotisch schnellste bekannte. Die Worst-Case-Laufzeit für eine kontextfreie Grammatik in Chomsky-Normalform ist proporitional zur Laufzeit für die Multiplikation von zwei booleschen  -Matrixen. Der schnellste derzeit bekannte Algorithmus für die Matrizenmultiplikation ist eine Variante des Coppersmith-Winograd-Algorithmus, der eine Laufzeit von etwa   hat.[3]

Literatur Bearbeiten

  • Itiroo Sakai: Syntax in universal translation. In: 1961 International Conference on Machine Translation of Languages and Applied Language Analysis. Her Majesty’s Stationery Office, London 1962, S. 593–608 (mt-archive.info [PDF]).
  • Tadao Kasami: An Efficient Recognition and Syntax-Analysis Algorithm for Context-Free Languages. Air Force Cambridge Research Lab, Bedford 11. Juni 1965 (Scientific report AFCRL-65-758).
  • Daniel H. Younger: Recognition and parsing of context-free languages in time . In: Information and Control. Band 10, Nr. 2, 1967, S. 189–208.
  • John Cocke, Jacob T. Schwartz: Programming languages and their compilers. Preliminary notes. Courant Institute of Mathematical Sciences of New York University, New York 1970.
  • John E. Hopcroft, Jeffrey D. Ullman: Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie. 3. Auflage. Addison-Wesley, Bonn 1996, S. 148–149 (1. Nachdruck).
  • Dick Grune, Ceriel J. H. Jacobs: Parsing Techniques. A Practical Guide. 1. Auflage. Ellis Horwood, New York 1990, ISBN 0-13-651431-6, S. 81–104 ([1] [PDF; 1,9 MB]).

Weblinks Bearbeiten

Einzelnachweise Bearbeiten

  1. Laura Kallmeyer, Heinrich-Heine-Universität Düsseldorf: Cocke Younger Kasami (CYK)
  2. Alexander Koller: The CKY Parser
  3. Lillian Lee, Department of Computer Science, Cornell University: Fast Context-Free Grammar Parsing Requires Fast Boolean Matrix Multiplication