Algorytm CYK
Algorytm CYK (Cocke’a-Youngera-Kasamiego) to dynamiczny algorytm służący do sprawdzania, czy dane słowo należy do języka bezkontekstowego. Wymaga on, aby język był przedstawiony w normalnej postaci Chomsky’ego. Czas działania algorytmu wynosi , gdzie to długość słowa, a to rozmiar gramatyki.
Opis działania algorytmu
Algorytm działa w następujący sposób:
- Tworzenie tablicy dla , z inicjalizacją wartości do 0.
- Ustawianie wartości w tablicy dla znaków pojedynczych:
- Dla znaku na pozycji oraz produkcji , ustawiamy .
- Dla każdej długości od 2 do :
- Dla każdego początku od 1 do :
- Dla każdego podziału od 1 do :
- Jeśli i są ustawione oraz istnieje produkcja , ustawiamy .
- Słowo należy do języka, jeśli , gdzie to symbol startowy gramatyki.
Przykład zastosowania
Rozważmy gramatykę bezkontekstową w normalnej postaci Chomsky’ego:
Formalnie, język opisany przez gramatykę to: . Sprawdzamy, czy słowo należy do tego języka.
Inicjalizacja tabeli
Podczas inicjalizacji tabeli, dla wyrazów długości 1, mamy:
- (reguła [4])
- (reguła [5])
Dla wyrazów długości 2, wyniki to:
- (reguła [3])
- Pozostałe pola są puste, ponieważ nie istnieją odpowiednie reguły.
Kontynuując dla wyrazów długości 3, 4 i 5, końcowy wynik dla długości 5 w polu to . Ponieważ symbol startowy nie znajduje się w tym zbiorze, słowo nie należy do gramatyki .