ALGORYTM CYK
Dla gramatyki bezkontekstowej w postaci normalnej Chomsky’ego algorytm CYK rozstrzyga, czy dane słowo należy do języka generowanego przez tę gramatykę.
Dla każdej gramatyki bezkontekstowej można znaleźć gramatykę równoważną w postaci normalnej Chomsky’ego.
Opis algorytmu:
Przypuśćmy, że słowo wa1an jest długości n.
Tworzymy tabelę dwuwymiarową, która w j-tym wierszu i i-tej kolumnie (1in j1) zawiera te zmienne gramatyki G, które generują podsłowo a i aij1 (jest to podsłowo długości j zaczynające się od i-tej litery).
Niech Xij oznacza zbiór zmiennych wypisanych w j-tym wierszu i i-tej kolumnie.
Elementy tabeli budujemy indukcyjnie.
Podstawa indukcji: j 1, wypełniamy pierwszy wiersz tabeli.
Jeżeli A ai jest produkcją, to AXi1 (A zostaje zapisane w i-tej kolumnie).
Krok indukcyjny: zakładamy, że wiersze j 1,,m1 zostały wypełnione.
Wypełniamy wiersz o numerze m.
Jeżeli w zbiorze produkcji jest A BC oraz istnieje k m takie, że Xik
B CXik,mk, to A zapisujemy do Xim.
Jeżeli SX1n, to oznacza że wL
G . Złożoność algorytmu CYK jest ograniczona przez T
n n3. Uwaga!We wszystkich poniższych zadaniach gramatyka bezkontekstowa G
,N,S,P
jest w postaci normalnej Chomsky’ego, tzn. reguły produkcji tej gramatyki mają postaćBC A ,
a A gdzie A,B,CN, a.
Zadanie 1
Dana jest gramatyka bezkontekstowa G
,N,S,P
, gdzie
a,b
N
S,A,B,C
P: S AB|BC ABA|a BCC|b CAB|a
a) Za pomocą algorytmu CYK sprawdzić, czy słowo x = baaba jest generowane przez tę gramatykę. Jeżeli tak, wyznaczyć co najmniej jedno wyprowadzenie tego słowa i
odpowiadające temu wyprowadzeniu drzewo wyprowadzeń.
b) Korzystając z tabeli dla algorytmu CYK dla słowa x wskaż podsłowa słowa x, które nie należą do L(G).
Rozwiązanie.
a)Aby zbadać, czy słowo x = baaba jest generowane przez gramatykę, stosujemy algorytm CYK i tworzymy tabelę:
j i 1 2 3 4 5
x b a a b a
1 B A,C A,C B A,C
2 A,S B S,C A,S
3 B B
4 S,A,C
5 A,S,C
Zbiór X15
A,S,C
. Oznacza to, że słowo x = baaba można wyprowadzić w tej gramatyce ze zmiennej A lub S lub C. Język generowany przez gramatykę tworzą słowa, które można wyprowadzić z S. Jak widać SX15, zatem słowo xL
G .Wyprowadzenie słowa x w G:
B C bC bA B baB baC C baC a
S 1,1 2,4 2,4 2,1 3,3 3,3 (3,2) (5,1) 3,2 baA
3,1B(4,1)abaabab) 1- literowe:
aL
G , bo a nie da się wyprowadzić z S bL
G , bo a nie da się wyprowadzić z S 2- literoweba,abL
G ; aaL
G3- literowe
baa, aab, aba L
G 4 – literowebaab L
G ; aabaL
GZadanie 2
Dana jest gramatyka bezkontekstowa G
,N,S,P
, gdzie
a,b
N
S,A,B
P: S SS|AB AAS|AA|a BSB|BB|b
Za pomocą algorytmu CYK sprawdzić, czy słowo x = aabbab jest generowane przez tę gramatykę. Jeżeli tak, wyznaczyć co najmniej jedno wyprowadzenie tego słowa i odpowiadające temu wyprowadzeniu drzewo wyprowadzeń.
Rozwiązanie.
Aby zbadać, czy słowo x = aabbab jest generowane przez gramatykę, stosujemy algorytm CYK i tworzymy tabelę:
j i
1 2 3 4 5 6
x a a b b a b
1 A A B B A B
2 A S B S
3 A,S S,B
4 A,S,B
5 A S
6 A,S
Zbiór X16
A,S . Oznacza to, że słowo x = aabbab można wyprowadzić w tej gramatyce ze zmiennej A lub S . Język generowany przez gramatykę tworzą słowa, które możnawyprowadzić z S. Jak widać SX16, zatem słowo xL
G . Wyprowadzenie słowa x w G:
A B A b A A b A ab A S ab aS ab S (1,5) (6,1) (1,5) (1,4) (5,1) (1,4) (1,1) (2,3) (2,3)
aabbab ab
B aaB ab
aaB ab
B
aA
(2,1) (3,2) (3,2) (3,1) (4,1)
Zadanie 3
Dana jest gramatyka bezkontekstowa G
,N,S,P
, gdzie
a,b
N
S,A,B
P: S SS|BB ASA|BS|a BBA|AA|b
Za pomocą algorytmu CYK sprawdzić, czy słowo x = aabbaba jest generowane przez tę gramatykę. Jeżeli tak, wyznaczyć co najmniej jedno wyprowadzenie tego słowa i odpowiadające temu wyprowadzeniu drzewo wyprowadzeń.
Rozwiązanie.
Aby zbadać, czy słowo x = aabbaba jest generowane przez gramatykę, stosujemy algorytm CYK i tworzymy tabelę:
j i
1 2 3 4 5 6 7
x
a a b b a b a
1 A A B B A B A
2 B S B B
3 S S,A S
4 A B A S,A
5 A,B B,S A,B
6 B,S B,S,A
7 B,S,A
Zbiór X17
B,A,S
. Oznacza to, że słowo x = aabbaba można wyprowadzić w tej gramatyce ze zmiennej B lub A lub S . Język generowany przez gramatykę tworzą słowa, które można wyprowadzić z S. Jak widać SX17, zatem słowo xL
G .Wyprowadzenie słowa x w G:
) 1 , 7 ( ) 3 , 4 ( )
4 , 4 ( )
4 , 4 ( ) 1 , 3 ( )
5 , 3 ( )
5 , 3 ( ) 1 , 2 ( ) 1 , 1 ( ) 5 , 3 ( ) 2 , 1
( B A A B aaB aaB A aabA aabS a
B
S
aabS(4,3)aaabB(4,2)B(6,1)aaabB(4,2)baaabB(4,1)A(5,1)baaabbaba