Sequitur

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Sequituralgorytm kompresji, który znajduje dla podanego tekstu opisującą go gramatykę bezkontekstową; następnie gramatyka jest kompresowana konwencjonalnymi metodami. Metoda została opracowana w 1996 roku przez Craiga Nevill-Manninga oraz Iana Wittena (patrz sekcja linki zewnętrzne).

Sequitur dla danych tekstowych, charakteryzujących się dużą powtarzalnością umożliwia uzyskanie dobrego stopnia kompresji. Ponadto można ją zaimplementować, tak aby działała w czasie liniowym (liczba operacji wprost proporcjonalna do długości tekstu). Wada: kodowany jest cały tekst, nie ma możliwości kompresowania strumienia danych.

Algorytm kodowania

Na gramatykę nakłada dwa ograniczenia:

  1. żadna para sąsiednich symboli (terminalnych i nieterminalnych) nie występuje więcej niż raz,
  2. każda produkcja wykorzystywana jest co najmniej dwa razy.

Algorytm składa się z dwóch głównych kroków:

  1. rozszerzenie gramatyki – dopisywanie kolejnych symboli wejściowych do produkcji startowej (tu ozn. S),
  2. modyfikacja gramatyki – jeśli któreś z ograniczeń zostanie złamane.

Po rozszerzeniu gramatyki może zostać złamane pierwsze ograniczenie, co powoduje konieczność dodania nowej produkcji. Np. po dopisaniu symbolu b do produkcji Sabcda przyjmie ona postać – Sab_cdab_. Powtarza się para ab, stąd zostaje dodana nowa produkcja Aab, a startowa przyjmuje postać SAcdA.

Z kolei drugie ograniczenie może zostać złamane po dodaniu nowej produkcji, gdy zastępuje ona wystąpienia innej produkcji. Np. po dopisaniu symbolu c, produkcja startowa przyjmuje postać SAc_dAc_, dodawana jest nowa reguła BAc. Gramatyka ma teraz postać:

  • SBdB,
  • Aab,
  • BAc,

produkcja druga (A) jest wykorzystywana tylko raz (w produkcji 3, B). Po jej usunięciu gramatyka zostaje uproszczona do:

  • SBdB,
  • Babc.

Zobacz też

Linki zewnętrzne