Algoritmus Cocke-Younger-Kasami
Z Wikipedie, otevřené encyklopedie
Algoritmus CYK (Cocke-Younger-Kasami) je algoritmus, který určuje, zda slovo náleží do bezkontextového jazyka, a to v časové složitosti
vzhledem k délce slova. Bezkontextový jazyk musí být zapsán gramatikou v Chomského normální formě.
Algoritmus vypadá takto:
- Vytvoříme pole
, pro
, kde
jsou postupně všechny neterminály (nebo alternativně jejich čísla), a hodnoty všech jeho prvků nastavíme na 0 - Pro každý znak
na pozici
, a pro každé
takové, že v gramatice existuje pravidlo
, nastavíme v poli ![T[i,1,X] := 1](//upload.wikimedia.org/math/2/1/6/216b75a7ffb9bed31f30e88090917701.png)
- Pro každou délku podslova
od 2 do
:
- Pro každý začátek podslova
od 1 do
:
- Pro každou délku první poloviny podslova
od 1 do
:
- Jestliže v poli mají jedničkovou hodnotu
i
, a v gramatice existuje pravidlo
, nastavíme v poli ![T[j,i,Z] := 1](//upload.wikimedia.org/math/9/2/2/922cf1736e8f7cf766eba3081e981178.png)
- Jestliže v poli mají jedničkovou hodnotu
- Pro každou délku první poloviny podslova
- Pro každý začátek podslova
- Slovo náleží do jazyka, jestliže
, kde
je vstupní neterminál gramatiky.
, pro
, kde
jsou postupně všechny neterminály (nebo alternativně jejich čísla), a hodnoty všech jeho prvků nastavíme na 0
na pozici
, a pro každé
takové, že v gramatice existuje pravidlo
, nastavíme v poli ![T[i,1,X] := 1](http://upload.wikimedia.org/math/2/1/6/216b75a7ffb9bed31f30e88090917701.png)
:
od 1 do
:
od 1 do
:
i
, a v gramatice existuje pravidlo
, nastavíme v poli ![T[j,i,Z] := 1](http://upload.wikimedia.org/math/9/2/2/922cf1736e8f7cf766eba3081e981178.png)
, kde
je vstupní neterminál gramatiky.