Kodowanie gramatykowe

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Kodowanie gramatykowe (ang. grammar-based coding) – nazwa grupy algorytmów kodowania stosowanych w bezstratnej kompresji danych, w których dane wejściowe opisuje się gramatyką bezkontekstową, dąży się przy tym do minimalizacji ilości reguł. Następnie gramatyka jest kompresowana innymi metodami. Kodowanie sprawdza się m.in. w kompresji DNA oraz tekstów naturalnych, w których powtarzają się ciągi liter, ale często też całe słowa, frazy czy zdania.

Idea kodowania gramatykowego wykorzystuje powtórzenia ciągów liter, które są zastępowane specjalnymi symbolami (nieterminalnymi). Np. w tekście „aaabaaacaaadaaae” powtarza się ciąg „aaa”, stąd gramatyka, która go opisuje może składać się z dwóch reguł:

  1. Aaaa – reguła pomocnicza, zapamiętująca powtórzenie;
  2. SAbAcAdAe – reguła główna, opisująca cały tekst (gdzie S to symbol startowy).

Istnieją dwa podejścia do budowania gramatyki:

  1. Kodowanie rozpoczyna się od pustego ciągu, do którego dopisywane są kolejne litery z tekstu i gdy zajdzie potrzeba, tworzone są nowe reguły pomocnicze. Metody działające według tego schematu:
  2. Kodowanie rozpoczyna się od wejściowego tekstu i w wyniku jego całościowej analizy podejmowane są decyzje o dodaniu nowych reguł. Metody działające według tego schematu:
    • Multilevel Pattern Matching (MPM),
    • Byte Pair Encoding (BPE),
    • Greedy.

LZ78, LZW

Szablon:Osobny artykuł Chociaż metoda LZ78 (i pochodne) jest klasyfikowana jako kodowanie słownikowe, obecnie rozważa się ją także w kategoriach kodowania gramatykowego. Podstawowym krokiem kodowania jest dodawanie do słownika konkatenacji najdłuższego słowa ze słownika pasującego do początku niezakodowanych jeszcze danych oraz kolejnego symbolu; np. jeśli do zakodowania jest słowo „wiki”, a w słowniku istnieje „wik”, to do słownika trafia „wik” + „i”.

Z punktu widzenia kodowania gramatykowego słownik jest tożsamy z listą reguł, zaś jego rozszerzenie z dodaniem nowej; np. jeśli istnieje reguła Awik i ma zostać zakodowane „wiki”, wówczas dodawana jest nowa reguła BAi.

Sequitur

Szablon:Osobny artykuł

Multilevel Pattern Matching (MPM)

Uniwersalna metoda MPM została opracowana przez Johna Kieffere, En-hui Yanga, Gregora Nelsona oraz Pamelę Cosman ([MPM2000]). Jednakże jej specjalny przypadek był znany już w latach 70. XX wieku i stosowany w zapisie oraz działaniach na funkcjach boolowskich (binary decision diagrams – BDD); metoda ta była już wówczas traktowana jako pewna forma kompresji danych.

W MPM kodowany tekst jest rekurencyjnie dzielony na podsłowa, następnie wszystkie słowa na tym samym poziomie podziału są zamieniane na reguły mające po prawej stronie słowa z głębszego poziomu. MPM zakłada dowolny podział, na 2, 3, 4 i więcej części.

Na przykład kodowanie tekstu aabbaaabababaaab dla podziałów na 2 części przebiega następująco:

  • poziom 0 = aabbaaabababaaabS, produkcje: ST1T2,
  • poziom 1 = aabbaaabT1,ababaaabT2, produkcje: T1U1U2,T2U3U2,
  • poziom 2 = aabbU1aaabU2ababU3aaabU2, produkcje: U1V1V2,U2V1V3,U3V3V3,
  • poziom 3 = aaV1bbV2aaV1abV3abV3abV3aaV1abV3, produkcje: V1aa,V2bb,V3ab.

Jak widać już przy drugim podziale ujawniają się powtórzenia – zamiast 22=4 ciągów, są 3 różne (U1,2,3); podobnie na kolejnym – zamiast 23=8 ciągów, są zaledwie 3 różne (V1,2,3).

Byte Pair Encoding (BPE)

Metoda została opisana w pracy [BPE1999]. Nie daje ona wyraźnie lepszej kompresji danych – współczynniki kompresji, a także czas kompresji są gorsze niż popularnych metod opartych na LZ77 czy LZ78 (np. gzip). Jednak wyszukiwanie wzorców w skompresowanych tekstach jest szybsze i łatwiejsze – nie jest wymagana dekompresja.

Tworzenie gramatyki (kompresowanie) polega na iteracyjnym dodawaniu nowych reguł dla najczęściej powtarzających się par symboli w produkcji startowej.

Np.

  1. Sab_cdab_cdacab_ad,
  2. SAcd_Acd_acAad, Aab,
  3. SAB_AB_acAad, Aab, Bcd,
  4. SCCacAad, Aab, Bcd, CAB.

Greedy

Pomysłodawcami metody opisanej w [GRE2000] są Aleberto Apostolico oraz Stefano Lonardi. Metoda greedy (zachłanna) rozpoczyna od całego tekstu, następnie wyszukiwany jest ciąg, którego zastąpienie przez wprowadzenie nowej produkcji spowoduje maksymalne skrócenie gramatyki. Zasada działania jest więc dość podobna do opisanej metody BPE, z tą różnicą, że kryteria wyboru ciągu są bardziej złożone.

Eksperymenty autorów wykazały, że metoda daje lepsze współczynniki kompresji niż popularne kompresory gzip, bzip2 i compress[1].

Zobacz też

Przypisy

Szablon:Przypisy

Bibliografia