Algorytm CYK

Struktura danych

Napis (ciąg znaków)

Złożoność
Czasowa

O ( n 3 | G | ) {\displaystyle O(n^{3}\cdot |G|)}

Algorytm CYK (Cocke’a-Youngera-Kasamiego) – dynamiczny algorytm sprawdzający, czy słowo należy do języka bezkontekstowego. Język bezkontekstowy musi być przedstawiony w postaci normalnej Chomsky’ego. Algorytm działa w czasie O ( n 3 | G | ) , {\displaystyle O(n^{3}\cdot |G|),} gdzie n {\displaystyle n} jest długością słowa, a | G | {\displaystyle |G|} jest rozmiarem gramatyki.

Algorytm

Pseudokod algorytmu:

Tworzymy tablicę T [ i , j , x ] , {\displaystyle T[i,j,x],} dla 1 i j n , {\displaystyle 1\leqslant i\leqslant j\leqslant n,} zaś x {\displaystyle x} przebiega wszystkie nieterminale (czy też równoważnie ich numery), wszystkie jej wartości ustawiając na 0
Dla każdego znaku a {\displaystyle a} na pozycji i , {\displaystyle i,} i dla każdego X {\displaystyle X} takiego, że w gramatyce jest produkcja X a , {\displaystyle X\to a,} ustawiamy w tablicy T [ i , 1 , X ] := 1 {\displaystyle T[i,1,X]:=1}
Dla każdej długości i {\displaystyle \color {blue}{i}} od 2 do n : {\displaystyle n{:}}
Dla każdego początku j {\displaystyle \color {Green}{j}} od 1 do n i + 1 : {\displaystyle n-i+1{:}}
Dla każdego podziału k {\displaystyle \color {Apricot}{k}} od 1 do i 1 : {\displaystyle i-1{:}}
Jeśli w tablicy są ustawione T [ j , k , X ] {\displaystyle T[j,k,X]} i T [ j + k , i k , Y ] , {\displaystyle T[j+k,i-k,Y],} a w gramatyce mamy produkcję Z X Y , {\displaystyle Z\to XY,} ustawiamy T [ j , i , Z ] := 1 {\displaystyle T[j,i,Z]:=1}
Słowo należy do języka, jeśli T [ 1 , n , S ] = 1 , {\displaystyle T[1,n,S]=1,} gdzie S {\displaystyle S} to symbol startowy gramatyki

Przykład

Dana jest gramatyka bezkontekstowa w postaci normalnej Chomsky’ego:

[1] S A C {\displaystyle S\to AC}
[2] C S B {\displaystyle C\to SB}
[3] S A B {\displaystyle S\to AB}
[4] A a {\displaystyle A\to a}
[5] B b {\displaystyle B\to b}

Formalnie:

G = { a n b n | n 1 } {\displaystyle G=\{a^{n}b^{n}|n\geqslant 1\}}

Pytanie: a a b b b G {\displaystyle aabbb\in G} ?

Inicjalizacja tabeli:

1 2 3 4 5
a a b b b
1
2
3
4
5

Wyrazy długości 1:

pola [ 1 , 1 ] = [ 1 , 2 ] = { A } , {\displaystyle [1,1]=[1,2]=\{A\},} z racji istnienia reguły [4]
pola [ 1 , 3 ] = [ 1 , 4 ] = [ 1 , 5 ] = { B } , {\displaystyle [1,3]=[1,4]=[1,5]=\{B\},} z racji istnienia reguły [5]
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2
3
4
5

Wyrazy długości 2:

pole [ 2 , 1 ] = , {\displaystyle [2,1]=\emptyset ,} ponieważ nie istnieje żadne reguła, która miałaby po prawej stronie ciąg symboli nieterminalnych A A {\displaystyle AA}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2
3
4
5
pole [ 2 , 2 ] = { S } , {\displaystyle [2,2]=\{S\},} z racji produkcji [3]
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3
4
5
pole [ 2 , 3 ] = , {\displaystyle [2,3]=\emptyset ,} ponieważ nie istnieje żadna reguła, która miałaby po prawej stronie ciąg symboli nieterminalnych B B {\displaystyle BB}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3
4
5
pole [ 2 , 4 ] = , {\displaystyle [2,4]=\emptyset ,} ponieważ nie istnieje żadna reguła, która miałaby po prawej stronie ciąg symboli nieterminalnych B B {\displaystyle BB}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3
4
5

Wyrazy długości 3:

pole [ 3 , 1 ] = , {\displaystyle [3,1]=\emptyset ,} ponieważ nie istnieje żadna reguła, która miałaby po prawej stronie ciąg symboli nieterminalnych A S {\displaystyle AS} lub tylko B {\displaystyle B}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3
4
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3
4
5
pole [ 3 , 2 ] = { C } , {\displaystyle [3,2]=\{C\},} z racji reguły [ 2 ] {\displaystyle [2]}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3
4
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4
5
pole [ 3 , 3 ] = , {\displaystyle [3,3]=\emptyset ,} ponieważ nie istnieje żadna reguła, która miałaby po prawej stronie symbol B {\displaystyle B}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4
5

Wyrazy długości 4:

pole [ 4 , 1 ] = { S } , {\displaystyle [4,1]=\{S\},} z racji reguły [ 1 ] {\displaystyle [1]}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4
5
pole [ 4 , 2 ] = , {\displaystyle [4,2]=\emptyset ,} ponieważ nie istnieje żadna reguła, która miałaby po prawej stronie symbol A , {\displaystyle A,} S {\displaystyle S} lub ciąg symboli nieterminalnych C B . {\displaystyle CB.}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5

Wyrazy długości 5:

pole [ 5 , 1 ] = { C } , {\displaystyle [5,1]=\{C\},} z racji reguły [ 2 ] {\displaystyle [2]}
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5
1 2 3 4 5
a a b b b
1 { A } {\displaystyle \{A\}} { A } {\displaystyle \{A\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}} { B } {\displaystyle \{B\}}
2 { S } {\displaystyle \{S\}}
3 { C } {\displaystyle \{C\}}
4 { S } {\displaystyle \{S\}}
5 { C } {\displaystyle \{C\}}

Ponieważ symbol startowy S {\displaystyle S} nie jest podzbiorem zbioru w polu [ 5 , 1 ] , {\displaystyle [5,1],} czyli { C } , {\displaystyle \{C\},} wyraz a a b b b {\displaystyle aabbb} nie jest elementem gramatyki G . {\displaystyle G.}

Zobacz też

  • algorytm Earleya

Bibliografia

  • John E. Hopcroft: Wprowadzenie do teorii automatów, języków i obliczeń. Warszawa: Wydawnictwo Naukowe PWN, 2005, s. 276. ISBN 83-01-14502-1.