ALGORYTM CYK

Transkrypt

ALGORYTM CYK
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 w  a1 an jest długości n.
Tworzymy tabelę dwuwymiarową, która w j-tym wierszu i i-tej kolumnie ( 1  i  n  j  1 )
zawiera te zmienne gramatyki G, które generują podsłowo ai ai  j 1 (jest to podsłowo
długości j zaczynające się od i-tej litery).
Niech X ij 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 A  X i1 (A zostaje zapisane w i-tej kolumnie).
Krok indukcyjny: zakładamy, że wiersze j  1,, m  1 zostały wypełnione.
Wypełniamy wiersz o numerze m.
Jeżeli w zbiorze produkcji jest A  BC oraz istnieje k  m takie, że
C  X i  k ,m k ,
B  X ik

to A zapisujemy do X im .
Jeżeli S  X 1n , to oznacza że w L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ć
A  BC ,
Aa
gdzie A, B, C  N , a   .
Zadanie 1
Dana jest gramatyka bezkontekstowa G  , N , S , P  , gdzie
  a, b
N  S , A, B, C
P: S  AB | BC
A  BA | a
B  CC | b
C  AB | 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ę:
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
j
Zbiór X 15  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ć S  X 15 , zatem słowo x  LG  .
Wyprowadzenie słowa x w G:
S  B1,1C2,4  bC2,4  bA2,1B3,3  baB3,3  baC(3,2)C(5,1)  baC3,2a 
 baA3,1B(4,1)a  baaba
b) 1- literowe:
a  LG  , bo a nie da się wyprowadzić z S
b  LG  , bo a nie da się wyprowadzić z S
2- literowe
ba, ab  LG  ; aa  LG 
3- literowe
baa, aab, aba  LG 
4 – literowe
baab  LG  ; aaba  LG 
Zadanie 2
Dana jest gramatyka bezkontekstowa G  , N , S , P  , gdzie
  a, b
N  S , A, B
P: S  SS | AB
A  AS | AA | a
B  SB | 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

1
2
3
4
5
6
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
i
x
Zbiór X 16  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żna
wyprowadzić z S. Jak widać S  X 16 , zatem słowo x  LG  .
Wyprowadzenie słowa x w G:
S  A(1,5) B(6,1)  A(1,5)b  A(1,4) A(5,1)b  A(1,4)ab  A(1,1)S (2,3)ab  aS (2,3)ab 
 aA(2,1) B(3,2)ab  aaB(3,2)ab  aaB(3,1) B(4,1)ab  aabbab
Zadanie 3
Dana jest gramatyka bezkontekstowa G  , N , S , P  , gdzie
  a, b
N  S , A, B
P: S  SS | BB
A  SA | BS | a
B  BA | 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
a
a
b
b
a
b
a
x
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 X 17  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ć S  X 17 , zatem słowo x  LG  .
Wyprowadzenie słowa x w G:
S  B(1,2) B(3,5)  A(1,1) A(2,1) B(3,5)  aaB(3,5)  aaB(3,1) A(4,4)  aabA(4,4)  aabS (4,3)a(7,1)
 aabS (4,3)a  aabB(4,2) B(6,1)a  aabB(4,2)ba  aabB(4,1) A(5,1)ba  aabbaba