Algoritmus Cocke-Younger-Kasami

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 ( n 3 ) {\displaystyle O(n^{3})} 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 ] {\displaystyle T[i,j,x]} , pro 1 i j n {\displaystyle 1\leq i\leq j\leq n} , kde x {\displaystyle 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 {\displaystyle a} na pozici i {\displaystyle i} , a pro každé X {\displaystyle X} takové, že v gramatice existuje pravidlo X a {\displaystyle X\rightarrow a} , nastavíme v poli T [ i , 1 , X ] := 1 {\displaystyle T[i,1,X]:=1}
Pro každou délku podslova i {\displaystyle i} od 2 do n {\displaystyle n} :
Pro každý začátek podslova j {\displaystyle j} od 1 do n i + 1 {\displaystyle n-i+1} :
Pro každou délku první poloviny podslova k {\displaystyle k} od 1 do i 1 {\displaystyle i-1} :
Jestliže v poli mají jedničkovou hodnotu T [ j , k , X ] {\displaystyle T[j,k,X]} i T [ j + k , i k , Y ] {\displaystyle T[j+k,i-k,Y]} , a v gramatice existuje pravidlo Z X Y {\displaystyle Z\rightarrow XY} , nastavíme v poli T [ j , i , Z ] := 1 {\displaystyle T[j,i,Z]:=1}
Slovo náleží do jazyka, jestliže T [ 1 , n , S ] = 1 {\displaystyle T[1,n,S]=1} , kde S {\displaystyle S} je vstupní neterminál gramatiky.

Jiné algoritmy jsou Earlyho parser a packrat parser.

Související články

Pahýl
Pahýl
Tento článek je příliš stručný nebo postrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty.