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 LG . 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 , Aa 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 LG . Wyprowadzenie słowa x w G: S B1,1C2,4 bC2,4 bA2,1B3,3 baB3,3 baC(3,2)C(5,1) baC3,2a baA3,1B(4,1)a baaba b) 1- literowe: a LG , bo a nie da się wyprowadzić z S b LG , bo a nie da się wyprowadzić z S 2- literowe ba, ab LG ; aa LG 3- literowe baa, aab, aba LG 4 – literowe baab LG ; aaba LG 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 LG . 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 LG . 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