Transcript Kompresní algoritmus LZW
Kompresní algoritmus LZW
Dokumentografické informační systémy
Cíl
Co je LZW algoritmus a jak pracuje.
Osnova
Historie slovníkové komprese.
Co je LZW?
Algoritmus LZW komprese.
Algoritmus LZW dekomprese.
Praktická implementace.
Výsledky testů.
Histrorie slovníkové komprese
Autoři: Ziv, Lempel 1977 základní princip Vyvinuty algoritmy ozn. LZ77 Programy - PKZip, Zip, ARJ, Gzip 1978 odlišný přístup Vyvinuty algoritmy ozn. LZ78 Programy - compress v Unixu, GIF, V.42 bis
Co je LZW?
Algoritmus pro kompresi textů.
Založen na
slovníkové metodě komprese
třídy LZ78.
Semiadaptivní komprese.
Algoritmus komprese
Postupné
čtení dokumentu D
.
Při čtení sestavován
slovník frází
.
Na počátku obsaženy fráze délky 1.
Současné vytváření výstupního zkomprimovaného souboru.
Kroky komprese
Prohledáván slovník frází.
Nalezení nejdelší fráze shodné s textem na vstupu.
Pořadové číslo fráze uloženo do výstupního souboru.
Nalezená fráze odebrána ze vstupu Vytváření nové fráze.
= právě použitá fráze + znak na vstupu
Co to znamená
Znak na vstupu je prvním znakem fráze použitém v příštím kroku.
Nová fráze se vytváří vždy ze dvou po sobě použitých Fráze kroku m První znak fráze kroku m+1 Nová fráze kroku m+1
Výsledek
Opakováním kroků algoritmu, dokud není přečten celý vstupní soubor, je vytvářen výstupní zkomprimovaný soubor. Tento soubor obsahuje pořadová čísla frází ve slovníku.
Algoritmus dekomprese
Probíhá obdobně jako komprese -
vytváří se slovník stejných frází
Na počátku jsou ve slovníku jen fráze délky 1.
Kroky dekomprese
Přečtení čísla fráze ze vstupního souboru. Odpovídající fráze je uložena do výstupního souboru.
Vytvoření nové fráze a její začlenění do slovníku. = fráze z předposledního kroku + první znak z posledního kroku.
Fráze kroku m První znak fráze kroku m+1 Nová fráze kroku m+1
Začlenění fráze do slovníku je oproti kompresi o krok zpožděno.
Pokud první znak fráze je shodný s prvním znakem fráze použité v předchozím kroku, fráze při dekompresi zatím ve slovníku neexistuje. Na základě toho lze doplnit chybějící frázi.
Použitá fráze Znak na vstupu Nová fráze
Praktická implementace
Rychlost komprese rychlosti vyhledávání fráze ve slovníku.
závislá na Kladen důraz na účelné využití paměti.
Vyhovuje -
uložení frází ve stromové struktuře.
Stromová struktura slovníku
a 0 b 4 c 6 d 12 Kořen b 1 c 2 d 3 a 5 d 7 a 8 a 9 d 10 a 11 Zřetězením znaků od kořene k jednotlivým uzlům stromu získáme všechny fráze.
Realizace stromu
Pomocí ukazatelů nevýhodné spotřeba místa, rychlost.
Efektivnější tabulka - použití indexů tabulky.
Nevýhodné - vysoká arita uzlu následníků stromu.
Binarizace n-árního stromu
Kořen a 0 b 1 c 2 d 3 b 4 c 6 d 12 a 5 d 7 a 8 a 9 a 11 d 10 V každém uzlu (vyjma kořenového) jen dva ukazatele.
Prvního následníka Sousední uzel
Obvyklá implementace LZW
Na vstupu 256 možných znaků.
Na počátku vždy slovník inicializován hodnotami 0-255.
Omezený rozsah slovníku obvykle 4096 frází.
Je li slovník vyčerpán, slovník se zruší a znovu inicializuje.
Informace o novém slovníku uložena do výstupního souboru.
Konec komprese uložen do výstupního souboru.
Uložení čísla fráze do výstupního souboru
Číslo fráze ukládáno pomocí 12 bit K vyjádření čísel 0 - 4095 je zapotřebí 12 bitů Dokonalejší způsob 0 511 uloženo do 9 bitů 512 1023 uloženo do 10 bitů 1024 2047 uloženo do 11 bitů 2048 4095 uloženo do 12 bitů Nový slovník 256 9ti bit.
10ti bit. 11ti bit. 12ti bit.
Nový slovník 256
Závěrečný test komprese
Úspěšnost komprese 8KB textového souboru - 55% 12KB JPEG zvětšen o 34% 11KB GIF zvětšen o 28% 55KB HTML - 53%
Děkuji Vám za pozornost.
Informace o této prezentaci naleznete na:
http://home.vsb.cz/pn
.