Algoritmus Cocke-Younger-Kasami

Z testwiki
Skočit na navigaci Skočit na vyhledávání

Algoritmus CYK (Cocke-Younger-Kasami) je algoritmus, který určuje, zda slovo náleží do bezkontextového jazyka, a to v časové složitosti O(n3) 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 T[i,j,x], pro 1ijn, kde x jsou postupně všechny neterminály (nebo alternativně jejich čísla), a hodnoty všech jeho prvků nastavíme na 0
Pro každý znak a na pozici i, a pro každé X takové, že v gramatice existuje pravidlo Xa, nastavíme v poli T[i,1,X]:=1
Pro každou délku podslova i od 2 do n:
Pro každý začátek podslova j od 1 do ni+1:
Pro každou délku první poloviny podslova k od 1 do i1:
Jestliže v poli mají jedničkovou hodnotu T[j,k,X] i T[j+k,ik,Y], a v gramatice existuje pravidlo ZXY, nastavíme v poli T[j,i,Z]:=1
Slovo náleží do jazyka, jestliže T[1,n,S]=1, kde S je vstupní neterminál gramatiky.

Jiné algoritmy jsou Earlyho parser a packrat parser.

Související články

Šablona:Pahýl Šablona:Autoritní data