Algorytm CYK

Z testwiki
Wersja z dnia 03:30, 29 lis 2024 autorstwa imported>VampaVampa (zmiana linków i zapisów po przeniesieniu artykułu)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Szablon:Inne znaczenia Szablon:Algorytm infobox 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 Chomskiego. Algorytm działa w czasie O(n3|G|), gdzie n jest długością słowa, a |G| jest rozmiarem gramatyki.

Algorytm

Pseudokod algorytmu:

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

Przykład

Dana jest gramatyka bezkontekstowa w postaci normalnej Chomskiego:

[1] SAC
[2] CSB
[3] SAB
[4] Aa
[5] Bb

Formalnie:

G={anbn|n1}

Pytanie: aabbbG?

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}, z racji istnienia reguły [4]
pola [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} {A} {B} {B} {B}
2
3
4
5

Wyrazy długości 2:

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

Wyrazy długości 3:

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

Wyrazy długości 4:

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

Wyrazy długości 5:

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

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

Zobacz też

Bibliografia