Algorytmy kodowania słownikowego
Transkrypt
Algorytmy kodowania słownikowego
Algorytmy kodowania
słownikowego
1. Kodowanie ze słownikiem statycznym
2. Kodowanie ze słownikiem dynamicznym
(LZ77, LZ78, LZSS, LZW)
3. Zastosowania
Algorytmy entropijne i słownikowe
Do tej pory – algorytmy entropijne
U ywaj modeli probabilistycznych do optymalnego zakodowanie
pojedynczych symboli
Kody poszczególnych symboli ró nej długo ci – dobrane tak, by w
redniej uzyska kompresj
Nie bior pod uwag korelacji pomi dzy symbolami – to mo e by
istotne ródło redundancji
Algorytmy słownikowe
Nie koduj pojedynczych symboli kodami o zmiennej długo ci
tylko ci gi znaków o zmiennej długo ci poprzez zapisy o stałej
długo ci
Zapisy te tworz indeksy do słowników fraz
Je eli zapisy (indeksy) krótsze ni frazy – kompresja
Kodowanie słownikowe - zasada
Chcemy zakodowa zdanie angielskie:
A good example of how dictionary based compression works
Słownik: Longman Dictionary of Contemporary English
Kodowanie: wska nik do słowa to x/y, x – nr strony, y – nr
słowa na stronie. Wynik:
1/1 489/7 377/19 755/36 548/13 303/7 73/3 223/1 1270/25
Liczba stron w słowniku: 1280 – x kodujemy przez 11 bitów
Liczba słów na stronie < 128 – y kodujemy przez 7 bitów
Wska nik x/y – 18 bitów. Całkowita ilo bitów: 9*18 = 162
Normalne kodowanie ASCII – 48 bajtów, czyli 384 bity
Stopie kompresji – 2.37 : 1
Słownik statyczny
Słownik statyczny – ustalony i niezmienny w trakcie
kodowania
Zastosowanie – gdy mamy wcze niejsz wiedz o
kodowanych danych (słownik zawiera najcz ciej
stosowane frazy)
Słownik bardzo zale ny od zastosowania
Bardziej uniwersalna metoda kodowania ze słownikiem
statycznym – kodowanie digramowe. Słownik – zawiera
wszystkie litery alfabetu oraz tak ilo par liter
(digramów) ile si zmie ci
Przykład: słownik 256 znaków, alfabet – drukowalne znaki ASCII 95 znaków. Mo emy wi c mie 161 digramy
Kodowanie digramowe
Przykład:
Alfabet {a, b, d, k, r}
Ci g do zakodowania: abrakadabra
Do zakodowania wszystkich liter potrzeba 3 bitów –
słownik o rozmiarze 23
a
000
r
100
b
001
ab
101
d
010
ak
110
k
011
ad
111
Wynik kodowania: 101|100|110|111|101|101|000
Słownik dynamiczny
Wi ksze znaczenie – metody ze słownikiem dynamicznym
Bardziej uniwersalne ni oparte na słowniku statycznym
Przełomowe znaczenie – prace Jacoba Ziva i Abrahama
Lempela z ko ca lat siedemdziesi tych
Słownik budowany dynamicznie na podstawie
przetworzonej cz ci danych – równy fragmentowi
przetworzonej cz ci danych lub wytworzony ze
wszystkich fraz przetworzonych do tej pory
Najwa niejsze algorytmy: LZ77, LZ78, LZW
Algorytm LZ77
Słownik – fragment wcze niej zakodowanej cz ci danych
Przegl damy dane przez przesuwaj ce si okno o
rozmiarze W
Okno dzieli si na:
bufor słownikowy – zawiera ostatnio zakodowany fragment ci gu
danych
bufor kodowania – zawiera fragment ci gu, który wła nie mamy
kodowa
Praktyczne implementacje – rozmiar bufora
słownikowego: 8 – 16 kB, rozmiar bufora kodowania ~
100 bajtów
Algorytm LZ77 – c.d.
Zasada działania:
Umieszczamy wska nik przeszukiwania na ko cu bufora
słownikowego
Przesuwamy wska nik w lewo (liczba miejsc – o) a do
napotkania symbolu równego pierwszemu symbolowi w buforze
kodowania
Sprawdzamy, czy nast pne symbole w obu buforach nie s sobie
równe. Liczba równych sobie symboli – długo dopasowania l
Przegl damy w ten sposób cały bufor słownikowy tak, by
zmaksymalizowa dopasowanie
Optymalne dopasowanie kodujemy jako (o, l, c), gdzie c – kod
symbolu w buforze kodowania wyst puj cy jako pierwszy
niedopasowany symbol
k a b
r
a k a d a
7
b
r
4
a
r
r
a
(7, 4, C(r))
Algorytm LZ77 – c.d.
Ostatni element trójki – na wypadek zerowego dopasowania
Po wysłaniu kodu (o, l , c) przesuwamy okno o l + 1 w prawo i
powtarzamy procedur
Długo zapisu koduj cego dla kodowania o stałej
długo ci
niech rozmiar okna = W, rozmiar bufora słownikowego = S,
rozmiar alfabetu = A
wtedy długo zapisu = log2 S + log2 W + log2 A
Uwaga: dopasowanie mo e przekroczy rozmiar bufora
słownikowego
Algorytm LZ77 – kodowanie
Kodujemy ci g:
. k a b r a k a d a b r a r r a r r a d .
Zakładamy, e podci g k a b r a k a jest ju zakodowany.
Parametry okna: W=13, S=7
Kolejne kroki kodowania:
k
a
b
r
a
k
a
d
a
b
r
a
r
(0,0,C(d))
a
b
r
a
k
a
d
a
b
r
a
r
r
(7,4,C(r))
a
d
a
b
r
a
r
r
a
r
r
a
d
(3,5,C(d))
Algorytm LZ77 – dekodowanie
Startujemy z odkowowanego podci gu k a b r a k a
Odkodowujemy (0,0,C(d)) – czyli C(d)
k a b
r
a k a
d
Odkodowujemy (7,4,C(r))
k a b
r
a k a d
Kopiowanie 1 znaku
k a b
r
a k a d a
Przesuni cie o 7
Kopiowanie 2 znaku
k a b
r
a k a d a b
Kopiowanie 3 znaku
k a b
r
Odkodowanie C(r)
Kopiowanie 4 znaku
k a b
r
a k a d a b r a
a k a d a b r
k a b
r
a k a d a b r a
r
Algorytm LZ77 – dekodowanie – c.d.
Odkodowanie (3,5,C(d))
a b a b
r
a
r
1 znak
a b a b
r
a
o 3 pozycje
2 znak
a b a b
r
a
r r
r
r
3 znak
a b a b
a
r
a
r r
a
r
4 znak
a b a b
r
a
r r
a
r
5 znak
r
a b a b
Odkodowanie C(d)
a b a b
r
a
r r
a
r
r a
d
r
a
r r
a
r
r a
Algorytm LZ77 – własno ci
Prosta metoda adaptacyjna, nie wymaga wcze niejszej
wiedzy o charakterze ródła
Kodowanie mo e by czasochłonne (du o porówna );
dekodowanie proste i szybkie
Niedu e wymagania dotycz ce pami ci
Asymptotycznie – wyniki najlepsze jakie mo na uzyska
przy pełnej cz sto ci pojawiania si znaków i korelacji
mi dzy nimi
Mo na zastosowa ró ne modyfikacje algorytmu
poprawiaj ce jego efektywno
Odmiany LZ77
Algorytm LZSS – unika konieczno ci wysyłania (o,l,c)
Redundancja – albo nie trzeba pointera (bo jest zerowy), albo kodu
znaku (mo e by przekazany w nast pnym wej ciu)
Działanie:
• Znajd dopasowanie (o,l)
• Je eli l MIN_LENGTH to wysyłamy (o, l ) i przesuwamy okno o l
• Je eli l < MIN_LENGTH to wysyłamy kod pierwszego znaku z
bufora kodowania i przesuwamy okno o 1
• Aby rozró ni oba przypadki ich zapisy poprzedzamy odpowiednimi
flagami bitowymi
Inne modyfikacje – poprawa efektywno ci kodowania –
kodowanie trójek (lub dwójek liczb) kodowaniem o
zmiennej długo ci – pakiety Pkzip, Zip, gzip, ARJ, LHarc
Zastosowanie efektywnych struktur danych do
reprezentacji zawarto ci bufora słownikowego (TRIE)
Algorytm LZ78
Wada algorytmu LZ77 – sko czony czas, w jakim wzorzec
jest pami tany – wzorce odległe o bardziej ni szeroko
bufora słownikowego nie „czuj ” swej obecno ci
a b c d e f g h i a b c d e f g h i a b c d e f g i a b
LZ78 – zast pienie bufora słownikowego słownikiem
tworzonym explicite – dynamicznie w trakcie kodowania i
dekodowania
Słowniki – tabela zawieraj ca indeks i odpowiadaj cy mu
wzorzec. Na pocz tku kodowania (dekodowania) – słownik
pusty. Potem – ostatnio dopasowany wzorze + niedopas. znak
Kodowanie – para (i,c), gdzie i – indeks, c – kod pierwszego
niedopasowanego znaku
LZ78 – przykład
Ci g do zakodowania: aa_bbb_cccc_ddddd_e
Słownik:
Nr
Wzorzec
0
^
1
a
2
a_
3
b
4
bb
5
_
6
c
7
cc
8
c_
9
d
10
dd
11
dd_
12
e
Kodowanie:
(0,a)(1,_)(0,b)(3,b)(0,_)(0,c)
(6,c)(6,_)(0,d)(9,d)(10,_)
(0,e)
Do słownika wstawiane s
coraz dłu sze wzorce. Je eli
jaka fraza si powtarza, to
wkrótce znajdzie si w
cało ci w słowniku.
Odkodowanie – bardzo
proste.
Własno ci algorytmu LZ78
Szybsze kodowanie ni dla LZ77 (znacznie mniej
porówna stringów)
Łatwe dekodowanie (cho wolniejsze ni dla LZ77 –
konieczno odbudowy słownika)
Wzorce s stale dodawane do słownika (1 wzorzec na
jeden proces kodowania) i nie zapominane –
niebezpiecze stwo przepełnienia pami ci
Jest punktem wyj cia dla algorytmów pochodnych –
najbardziej znany algorytm LZW.
Algorytm LZW
Zaproponowany w 1984 przez Terry’ego Welcha
Główna modyfikacja – koder nie wysyła kodu pierwszego
niedopasowanego znaku (a tylko indeks słownika)
Aby to było mo liwe – słownik na starcie zawiera
wszystkie litery wyj ciowego alfabetu
Procedura kodowania:
Próbujemy dopasowa kawałek ła cucha wej ciowego
Niech s – maksymalny podła cuch który ma wzorzec w słowniku
(indeks j) o długo ci d, c – pierwszy niedopasowany znak
Na wyj cie: j (indeks wzorca zgodnego z s)
Do słownika dodajemy s+c
Przesuwamy znacznik pozycji o d
Algorytm LZW – kodowanie
• Przykład: kodujemy ci g a b c a b b c a b b a
a w D, ab – nie, ab do D4, wyj cie 1
Indeks
Wzorzec
1
a
b w D, bc – nie, bc do D5, wyj cie 2
2
b
c w D, ca – nie, ca do D6, wyj cie 3
3
c
ab w D, abb – nie, abb do D7, wyj cie 4
4
ab
bc w D, bca – nie, bca do D8, wyj cie 5
5
bc
6
ca
abb w D, abba – nie, abba do D9, wyj cie 7
7
abb
8
bca
9
abba
a w D, wyj cie 1
Wynik:
1234571
Algorytm LZW – dekodowanie
Odkodujemy ci g 1 2 3 4 5 7 1 ze słownikiem pocz tkowym
{a, b, c}
1
2
3
4
5
7
1
==>
==>
==>
==>
==>
==>
==>
wyj
wyj
wyj
wyj
wyj
wyj
wyj
cie a
cie b
cie c
cie ab
cie bc
cie abb
cie a
==>
==>
==>
==>
==>
==>
==>
awD
ab nie w D, ab do D4
bc nie w D, bc do D5
ca nie w D, ca do D6
abb nie w D, abb do D7
bca nie w D, bca do D8
abba nie w D, abba do D9
Algorytm LZW – problem
• Niekiedy w odkodowywaniu LZW problem – konieczno
u ycia wzorca, który jest w trakcie formowania.
• Przykład: zakodowa ci g a b a b a b a b
• Standardowe post powanie daje kod: 1 2 3 5 2
• Odkodowanie:
1 ==> wyj cie a ==> a w D
Indeks
Wzorzec
2
==> wyj cie b ==> ab nie w D, ab do D3
1
a
3
==> wyj cie ab ==> ba nie w D, ba do D4
2
b
5
3
ab
==> ale pozycja 5 w słowniku jeszcze
niegotowa !!!
4
ba
Wiemy, e D5 musi si zaczyna od ab – abx.
5
ab..
Czyli D5 to prefiks ababx którego jeszcze nie ma w
D – czyli aba
5
==> wyj cie aba ==> aba do D5
2
==> wyj cie b ==> abab do D6
Zastosowanie LZW
Polecenie compress
Rozmiar słownika (i długo kodów indeksów) zmienia si
dynamicznie
Zaczynamy od słownika o rozmiarze 512 (słowo kodowe 9bitowe). Gdy słownik si zapełnia, podwajamy rozmiar
Rozmiar maksymalny = 2b, gdzie b – pomi dzy 9 a 16 (default
równy 16).
Gdy rozmiar maksymalny osi gni ty – słownik si nie zmienia
Algorytm analizuje stopie kompresji; gdy zbyt niski, słownik jest
czyszczony i budowany od nowa
Zastosowanie LZW – c.d.
Format GIF
Podstawa – b = ilo pikseli na bit.
Zaczynamy od słownika o rozmiarze 2b+1. Po wypełnieniu –
zwi kszamy o czynnik 2.
Maksymalny rozmiar – 4096. Po jego osi gni ciu – słownik jest
zamro ony.
Kompresja danych wysyłanych przez modem (V.42 bis)
Mo e pracowa w trybie prze roczystym i trybie kompresji
Tryb kompresji – algorytm LZW ze słownikiem o zmiennej
długo ci
Standard pozwala na okresowe czyszczenie słownika z napisów,
które pojawiły si w przeszło ci, lecz nie były u ywane ostatnio
Kompresja obrazów - zestawienie
Huffman
Obraz
Huffman Dyn. Huff.
ró nice
ró nice
GIF
1_ch
57 504
32 968
32 261
51 085
2_ch
61 430
38 541
37 896
60 649
Ziemia
40 543
33 880
39 501
34 276
Miasto
58 374
52 643
52 321
61 580