Reklama
Dzisiaj jest 10 stycznia 2025 r.
Chcę dodać własny artykuł
Reklama
Reklama
Reklama

Algorytm CYK

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 O(n^3 \cdot |G|), gdzie n to długość słowa, a |G| to rozmiar gramatyki.

Reklama

Opis działania algorytmu

Algorytm działa w następujący sposób:

  • Tworzenie tablicy T[i,j,x] dla 1 \leqslant i \leqslant j \leqslant n, z inicjalizacją wartości do 0.
  • Ustawianie wartości w tablicy dla znaków pojedynczych:
    • Dla znaku a na pozycji i oraz produkcji X \to a, ustawiamy 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 n-i+1:
    • Dla każdego podziału k od 1 do i-1:
      • Jeśli T[j,k,X] i T[j+k,i-k,Y] są ustawione oraz istnieje produkcja Z \to XY, 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 zastosowania

Rozważmy gramatykę bezkontekstową w normalnej postaci Chomsky’ego:

Reklama
  • S \to AC
  • C \to SB
  • S \to AB
  • A \to a
  • B \to b

Formalnie, język opisany przez gramatykę to: G = \{a^nb^n | n \geqslant 1\}. Sprawdzamy, czy słowo aabbb należy do tego języka.

Inicjalizacja tabeli

Podczas inicjalizacji tabeli, dla wyrazów długości 1, mamy:

  • [1,1] = [1,2] = \{A\} (reguła [4])
  • [1,3] = [1,4] = [1,5] = \{B\} (reguła [5])

Dla wyrazów długości 2, wyniki to:

  • [2,2] = \{S\} (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 [5,1] to \{C\}. Ponieważ symbol startowy S nie znajduje się w tym zbiorze, słowo aabbb nie należy do gramatyki G.

Reklama
Reklama