<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Cocke-Younger-Kasami-Algorithmus</id>
	<title>Cocke-Younger-Kasami-Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Cocke-Younger-Kasami-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Cocke-Younger-Kasami-Algorithmus&amp;action=history"/>
	<updated>2026-06-24T00:41:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Cocke-Younger-Kasami-Algorithmus&amp;diff=248558&amp;oldid=prev</id>
		<title>imported&gt;StefanOllinger: Fixed Index</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Cocke-Younger-Kasami-Algorithmus&amp;diff=248558&amp;oldid=prev"/>
		<updated>2025-06-20T16:21:39Z</updated>

		<summary type="html">&lt;p&gt;Fixed Index&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Cocke-Younger-Kasami-Algorithmus&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;CYK-Algorithmus&amp;#039;&amp;#039;&amp;#039;) ist ein [[Algorithmus]] aus dem Gebiet der [[Theoretische Informatik|theoretischen Informatik]]. Mit ihm lässt sich feststellen, ob ein [[Wort (Theoretische Informatik)|Wort]] zu einer bestimmten [[Kontextfreie Sprache|kontextfreien Sprache]] gehört. In der Fachsprache bezeichnet man dies als Lösen des [[Wortproblem (Berechenbarkeitstheorie)|Wortproblems]] für kontextfreie Sprachen. Mit Hilfe von [[Backtracking]] kann der [[Syntaxbaum|Parse-Tree]] bzw. die Parse-Trees eines gegebenen Wortes der Sprache konstruiert werden. Um den Algorithmus anzuwenden, muss zu der vorgegebenen Sprache eine [[Formale Grammatik|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 [[Dynamische Programmierung|Prinzip der dynamischen Programmierung]].&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
Diese Beschreibung folgt Hopcroft/Ullman (1996).&lt;br /&gt;
&lt;br /&gt;
Als Eingabe erhält der Algorithmus eine [[kontextfreie Grammatik]] &amp;lt;math&amp;gt;G=(N,T,P,S)&amp;lt;/math&amp;gt; in Chomsky-Normalform und das zu prüfende Wort &amp;lt;math&amp;gt;w = w_1w_2\ldots w_n \in T^*&amp;lt;/math&amp;gt;. Nun wird für jedes Teilwort &amp;lt;math&amp;gt;w_{i,j} := w_i\ldots w_{i+j-1}&amp;lt;/math&amp;gt; (d.&amp;amp;nbsp;h.: &amp;lt;math&amp;gt;w_{i,j}&amp;lt;/math&amp;gt; fängt beim Index &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; an und hat die Länge &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;) die Menge der Nichtterminale berechnet, die &amp;lt;math&amp;gt;w_{i,j}&amp;lt;/math&amp;gt; erzeugen, bezeichnet durch &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Gemäß dem Prinzip der dynamischen Programmierung werden erst die &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt; für die kleinsten Teilwörter von &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
Ein Nichtterminal einer Grammatik in Chomsky-Normalform kann in einem Schritt nicht auf mehrere Terminale abgeleitet werden. Daher kann ein Teilwort &amp;lt;math&amp;gt;w_{i,j}&amp;lt;/math&amp;gt;, das mehr als nur ein Zeichen enthält, von &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; nur über eine Regel &amp;lt;math&amp;gt;(A \rightarrow BC) \in P&amp;lt;/math&amp;gt; erzeugt werden. Da Nichtterminale nicht das [[Leeres Wort|leere Wort (ε)]] erzeugen können, muss &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; den linken und &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; den rechten Teil von &amp;lt;math&amp;gt;w_{i,j}&amp;lt;/math&amp;gt; erzeugen. Daraus folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;A \in V_{i,j} \Leftrightarrow \exists k \in \N, 1 \le k \le j - 1: (A \rightarrow BC) \in P \land B \in V_{i,k} \land C \in V_{i + k, j - k}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten: &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; kann &amp;lt;math&amp;gt;w_{i,j}&amp;lt;/math&amp;gt; erzeugen, wenn es gemäß der Produktionsregeln auf &amp;lt;math&amp;gt;BC&amp;lt;/math&amp;gt; abgeleitet werden kann und &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; wiederum auf &amp;lt;math&amp;gt;w_{i,k}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;w_{i+k,j-k}&amp;lt;/math&amp;gt; abgeleitet werden, also&lt;br /&gt;
:&amp;lt;math&amp;gt;A \Rightarrow BC \Rightarrow^* w_i\ldots w_{i+k-1}C \Rightarrow^* w_i\ldots w_{i+k-1}w_{i+k}\ldots w_{i+j-1} = w_{i,j}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das Wortproblem kann nun einfach entschieden werden: &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; kann genau dann von der Grammatik erzeugt werden, wenn &amp;lt;math&amp;gt;S\in V_{1,n}&amp;lt;/math&amp;gt; gilt. In &amp;lt;math&amp;gt;V_{1,n}&amp;lt;/math&amp;gt; liegen alle Variablen, die das Teilwort erzeugen können, das beim ersten Buchstaben anfängt und die Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; hat, also das ganze Wort.&lt;br /&gt;
&lt;br /&gt;
== Algorithmus ==&lt;br /&gt;
&lt;br /&gt;
Aus der Beschreibung ergibt sich folgender Algorithmus:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Für&amp;#039;&amp;#039;&amp;#039; i = 1 ... n&lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;Für&amp;#039;&amp;#039;&amp;#039; jede Produktion &amp;lt;math&amp;gt;(l \rightarrow r) \in P&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;Falls&amp;#039;&amp;#039;&amp;#039; r = &amp;lt;math&amp;gt;w_i&amp;lt;/math&amp;gt;&lt;br /&gt;
       Setze &amp;lt;math&amp;gt;V_{i,1}:=V_{i,1} \cup \{ l \}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Für&amp;#039;&amp;#039;&amp;#039; j = 2 ... n&lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;Für&amp;#039;&amp;#039;&amp;#039; i = 1 ... n - j + 1&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;Für&amp;#039;&amp;#039;&amp;#039; k = 1 ... j - 1&lt;br /&gt;
       Setze &amp;lt;math&amp;gt;V_{i,j} := V_{i,j} \cup \{ l \in N \mid \exists Y, Z \in N: (l \rightarrow YZ) \in P \land Y \in V_{i,k} \land Z \in V_{i + k, j - k} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Falls&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;S \in V_{1,n}&amp;lt;/math&amp;gt;, stoppe und gib &amp;quot;w wird von G erzeugt&amp;quot; aus&lt;br /&gt;
 Stoppe und gib &amp;quot;w wird nicht von G erzeugt&amp;quot; aus&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Die Fragestellung lautet, ob sich das [[Wort (theoretische Informatik)|Wort]] &amp;lt;math&amp;gt;w = ()[()]&amp;lt;/math&amp;gt; durch die Grammatik &amp;lt;math&amp;gt;G = (\{ S, T, U, A, B, C, D \}, \{ (, ), [, ]  \}, P, S)&amp;lt;/math&amp;gt; erzeugen lässt. Die [[Produktionsregel]]n &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; der Grammatik seien:&lt;br /&gt;
:&amp;lt;math&amp;gt;S \rightarrow AB \mid CD \mid AT \mid CU \mid SS&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;T \rightarrow SB&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;U \rightarrow SD&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;A \rightarrow (&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;B \rightarrow )&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;C \rightarrow [&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;D \rightarrow ]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Algorithmus kann man mittels einer Tabelle durchführen. Dabei ist in der &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-ten Spalte und &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-ten Zeile &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt; gespeichert, also die Menge der [[Nichtterminalsymbol]]e, aus denen sich das Teilwort ableiten lässt, das beim Index &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; anfängt und die Länge &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; hat.&lt;br /&gt;
&lt;br /&gt;
Es gilt &amp;lt;math&amp;gt;w_1 = ( &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;w_2 = ) &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;w_3 = [ &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;w_4 = ( &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;w_5 = ) &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;w_6 = ] &amp;lt;/math&amp;gt;. Aus den [[Produktionsregel|Produktionsregeln]] &amp;lt;math&amp;gt;A \rightarrow (&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B \rightarrow )&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C \rightarrow [&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D \rightarrow ]&amp;lt;/math&amp;gt; folgt &amp;lt;math&amp;gt;V_{1,1} := \{A\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V_{2,1} := \{B\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V_{3,1} := \{C\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V_{4,1} := \{A\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V_{5,1} := \{B\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V_{6,1} := \{D\}&amp;lt;/math&amp;gt;. Das ergibt die erste Zeile der Tabelle:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt;&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| {A}&lt;br /&gt;
| {B}&lt;br /&gt;
| {C}&lt;br /&gt;
| {A}&lt;br /&gt;
| {B}&lt;br /&gt;
| {D}&lt;br /&gt;
|}&lt;br /&gt;
Nun wird für jedes &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt; geprüft, ob es Produktionsregeln der Form &amp;lt;math&amp;gt;l \rightarrow YZ&amp;lt;/math&amp;gt; gibt, für die das Nichtterminalsymbol &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; in derselben Spalte der Tabelle oberhalb von &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt; liegt, das Nichtterminalsymbol &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; in derselben Diagonalen rechts oberhalb von &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt; liegt und außerdem &amp;lt;math&amp;gt;Y \in V_{i,k}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;Z \in V_{i,k}&amp;lt;/math&amp;gt; gilt. Aus der Produktionsregel &amp;lt;math&amp;gt;S \rightarrow AB&amp;lt;/math&amp;gt; und den Einträgen &amp;lt;math&amp;gt;A \in V_{1,1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B \in V_{2,1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A \in V_{4,1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B \in V_{5,1}&amp;lt;/math&amp;gt; der ersten Zeile folgt &amp;lt;math&amp;gt;V_{1,2} := \{S\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V_{4,2} := \{S\}&amp;lt;/math&amp;gt;. Das ergibt die zweite Zeile der Tabelle: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt;&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| {A}&lt;br /&gt;
| {B}&lt;br /&gt;
| {C}&lt;br /&gt;
| {A}&lt;br /&gt;
| {B}&lt;br /&gt;
| {D}&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| {S}&lt;br /&gt;
| {}&lt;br /&gt;
| {}&lt;br /&gt;
| {S}&lt;br /&gt;
| {}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Aus den Produktionsregeln &amp;lt;math&amp;gt;U \rightarrow SD&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;S \rightarrow CU&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;S \rightarrow SS&amp;lt;/math&amp;gt; und den schon jeweils oberhalb vorhandenen Nichtterminalsymbolen ergeben sich die weiteren Zeilen der Tabelle:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt;&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| {A}&lt;br /&gt;
| {B}&lt;br /&gt;
| {C}&lt;br /&gt;
| {A}&lt;br /&gt;
| {B}&lt;br /&gt;
| {D}&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| {S}&lt;br /&gt;
| {}&lt;br /&gt;
| {}&lt;br /&gt;
| {S}&lt;br /&gt;
| {}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| {}&lt;br /&gt;
| {}&lt;br /&gt;
| {}&lt;br /&gt;
| {U}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| {}&lt;br /&gt;
| {}&lt;br /&gt;
| {S}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| {}&lt;br /&gt;
| {}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| {S}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Da &amp;lt;math&amp;gt;S\in V_{1,6}&amp;lt;/math&amp;gt;, lässt sich das gegebene Wort &amp;lt;math&amp;gt;w = ()[()]&amp;lt;/math&amp;gt; unter der Grammatik &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; aus &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; ableiten.&lt;br /&gt;
&lt;br /&gt;
Eine Linksableitung des Wortes &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; wäre demnach:&lt;br /&gt;
:&amp;lt;math&amp;gt; S \Rightarrow SS \Rightarrow ABS \Rightarrow (BS \Rightarrow ()S \Rightarrow ()CU \Rightarrow ()[U \Rightarrow ()[SD \Rightarrow ()[ABD \Rightarrow ()[(BD \Rightarrow ()[()D \Rightarrow ()[()] = w&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also ist &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; ein Wort der Sprache &amp;lt;math&amp;gt;L(G)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Komplexität ==&lt;br /&gt;
&lt;br /&gt;
Der Cocke-Younger-Kasami-Algorithmus entscheidet in der Zeit &amp;lt;math&amp;gt;\mathcal{O}\left(n^3\right)&amp;lt;/math&amp;gt;, ob ein Wort der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; in der Sprache &amp;lt;math&amp;gt;L(G)&amp;lt;/math&amp;gt; liegt (vgl. [[Landau-Symbole]] zur Beschreibung der Notation). Dabei wird Speicherplatz in der Größenordnung &amp;lt;math&amp;gt;\mathcal{O}\left(n^2\right)&amp;lt;/math&amp;gt; benötigt, denn jeder Eintrag &amp;lt;math&amp;gt;V_{i,j}&amp;lt;/math&amp;gt; der Tabelle benötigt Speicherplatz der Größenordnung &amp;lt;math&amp;gt;\mathcal{O}\left(1\right)&amp;lt;/math&amp;gt;. Die Effizienz hängt entscheidend vom [[Algorithmus]] für die [[Chomsky-Normalform]] ab, denn nur dann kann der CYK-Algorithmus verwendet werden.&amp;lt;ref&amp;gt;Laura Kallmeyer, Heinrich-Heine-Universität Düsseldorf: [https://user.phil-fak.uni-duesseldorf.de/~kallmeyer/Parsing/cyk.pdf Cocke Younger Kasami (CYK)]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Alexander Koller: [https://coli-saar.github.io/cl19/lectures/07-cky.pdf The CKY Parser]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt [[Asymptotische Laufzeit|asymptotisch]] schnellere Algorithmen. Graham, Harrison und Ruzzo geben eine Variante des [[Earley-Algorithmus]] an. Er hat eine [[Laufzeit (Informatik)|Laufzeit]] von &amp;lt;math&amp;gt;\mathcal{O}\left(gn^3 / \log(n)\right)&amp;lt;/math&amp;gt;. Rytter modifiziert diesen Algorithmus weiter und verbessert die Abhängigkeit von der Wortlänge auf &amp;lt;math&amp;gt;\mathcal{O}\left(n^3 / \log(n)\right)&amp;lt;/math&amp;gt;. 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 proportional zur Laufzeit für die Multiplikation von zwei booleschen &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;-Matrixen. Der schnellste derzeit bekannte Algorithmus für die [[Matrizenmultiplikation]] ist eine Variante des Coppersmith-Winograd-Algorithmus, der eine Laufzeit von etwa &amp;lt;math&amp;gt;\mathcal{O}\left(n^{2{,}376}\right)&amp;lt;/math&amp;gt; hat.&amp;lt;ref&amp;gt;Lillian Lee, Department of Computer Science, Cornell University: [https://arxiv.org/pdf/cs/0112018.pdf Fast Context-Free Grammar Parsing Requires Fast Boolean Matrix Multiplication]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Itiroo Sakai&lt;br /&gt;
   |Titel=Syntax in universal translation&lt;br /&gt;
   |Sammelwerk=1961 International Conference on Machine Translation of Languages and Applied Language Analysis&lt;br /&gt;
   |Verlag=Her Majesty’s Stationery Office&lt;br /&gt;
   |Ort=London&lt;br /&gt;
   |Datum=1962&lt;br /&gt;
   |Seiten=593–608&lt;br /&gt;
   |Online=[http://www.mt-archive.info/NPL-1961-Sakai.pdf mt-archive.info]&lt;br /&gt;
   |Format=PDF&lt;br /&gt;
   |KBytes=}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Tadao Kasami&lt;br /&gt;
   |Titel=An Efficient Recognition and Syntax-Analysis Algorithm for Context-Free Languages&lt;br /&gt;
   |Verlag=Air Force Cambridge Research Lab&lt;br /&gt;
   |Ort=Bedford&lt;br /&gt;
   |Datum=1965-06-11&lt;br /&gt;
   |Kommentar=&amp;#039;&amp;#039;Scientific report AFCRL-65-758&amp;#039;&amp;#039;}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Daniel H. Younger&lt;br /&gt;
   |Titel=Recognition and parsing of context-free languages in time &amp;#039;&amp;#039;n³&amp;#039;&amp;#039;&lt;br /&gt;
   |Sammelwerk=Information and Control&lt;br /&gt;
   |Band=10&lt;br /&gt;
   |Nummer=2&lt;br /&gt;
   |Datum=1967&lt;br /&gt;
   |Seiten=189–208}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=[[John Cocke]], [[Jacob T. Schwartz]]&lt;br /&gt;
   |Titel=Programming languages and their compilers. Preliminary notes&lt;br /&gt;
   |Verlag=Courant Institute of Mathematical Sciences of New York University&lt;br /&gt;
   |Ort=New York&lt;br /&gt;
   |Datum=1970}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=[[John E. Hopcroft]], [[Jeffrey D. Ullman]]&lt;br /&gt;
   |Titel=Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie&lt;br /&gt;
   |Auflage=3.&lt;br /&gt;
   |Verlag=Addison-Wesley&lt;br /&gt;
   |Ort=Bonn&lt;br /&gt;
   |Datum=1996&lt;br /&gt;
   |Seiten=148–149&lt;br /&gt;
   |Kommentar=1. Nachdruck}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Dick Grune, Ceriel J. H. Jacobs&lt;br /&gt;
   |Titel=Parsing Techniques. A Practical Guide&lt;br /&gt;
   |Auflage=1.&lt;br /&gt;
   |Verlag=Ellis Horwood&lt;br /&gt;
   |Ort=New York&lt;br /&gt;
   |Datum=1990&lt;br /&gt;
   |ISBN=0-13-651431-6&lt;br /&gt;
   |Seiten=81–104&lt;br /&gt;
   |Online=[ftp://ftp.cs.vu.nl/pub/dick/PTAPG_1st_Edition/BookBody.pdf]&lt;br /&gt;
   |Format=PDF&lt;br /&gt;
   |KBytes=1900}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://raw.org/tool/cyk-algorithm/ Interaktives Applet zur Demonstration des CYK-Algorithmus]&lt;br /&gt;
* [https://github.com/RobMcH/CYK-Parser/ Freie Python-Implementierung des CYK-Algorithmus]&lt;br /&gt;
* David Rodriguez-Velazquez, University of California: [https://www.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf The CYK Algorithm]&lt;br /&gt;
* educative.io: [https://www.educative.io/answers/what-is-the-cyk-algorithm What is the CYK algorithm?]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Algorithmus]]&lt;br /&gt;
[[Kategorie:Theorie formaler Sprachen]]&lt;br /&gt;
[[Kategorie:Dynamische Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;StefanOllinger</name></author>
	</entry>
</feed>