LZ78 jest nazwą słownikowej metody bezstratnej kompresji danych. Została opracowana w 1978 roku przez J. Ziva i A. Lempela i opisana w IEEE Transactions on Information Theory, w artykule pt. "Compression of individual sequences via variable-rate encoding" (str. 530-536).
Kompresja polega na zastępowaniu ciągów symboli indeksami do słownika przechowującego ciągi symboli, które wcześniej wystąpiły w kompresowanych danych. Dzięki temu wielokrotnie powtarzające się ciągi symboli (np. te same słowa w tekście) są zastępowane o wiele krótszymi indeksami (liczbami).
Panowie Ziv i Lempel rok wcześniej opracowali metodę LZ77, w której słownik miał stałą wielkość, co powodowało, że jego zawartość zmieniała się cały czas wraz z napływaniem nowych danych. Skutkiem tego, jeśli na wejściu powtórzył się pewien ciąg, który co prawda występował wcześniej, ale w słowniku już go nie było, musiał zostać zapamiętany raz jeszcze.
Ogólnie metoda LZ78 jest bardzo zbliżona do LZ77, z tym jednak wyjątkiem, że słownik jest rozszerzany w miarę potrzeb i żaden ciąg występujący w przetwarzanych już danych nie jest "zapominany". Dzięki temu uzyskuje się lepszy współczynnik kompresji kosztem skomplikowania dostępu do słownika. W LZ77 słownik jest zwykłą tablicą, w LZ78 - ze względu na szybkość dostępu do poszczególnych słów - realizowany jest jako drzewo (binarne, trie) albo tablica haszująca.
W praktyce najpowszechniej używany jest wariant LZ78 nazywany LZW.
Pewną wadą metody jest to, że kod kompresujący i dekompresujący praktycznie nie różnią się pod względem złożoności.
Algorytm:Kompresowany jest ciąg S zawierający n symboli.
1. Wyczyść słownik. 2. i: = 0 (i - indeks pierwszego, nieprzetworzonego symolu w S). 3. Dopóki i < n wykonuj:
Source: Wiki
|
| s u n f l o w e r |
|
![]() |
| a r c h i v e r |
|
|Contact|
rayjk@wp.pl
|