|
|||
LZ77 - Sliding WindowV tomto algoritme sa ako slovník používa časť vstupného textu, ktorá bola nedávno zakódovaná. Text, ktorý sa kóduje sa porovnáva so symbolmi v slovníku. Najdlhšia nájdená zhoda v slovníku je charakterizovaná pointrom, ktorý pozostáva z trojice dát. Algoritmus v LZ77 sa nazýva algoritmus posúvania okien. Okno pozostáva z dvoch častí: search bufer(SB) a look-ahead bufer (LAB). V SB je časť textu, ktorá už bola nedávno zakódovaná (bolo povedané, to je náš slovník), LAB obsahuje text, ktorý ideme v nasledujúcom kroku komprimovať. Tieto dva bufre (okná) sa počas procesu komprimácie posúvajú. Kompresia a dekompresia
Pozrime sa najprv na jeden príklad, ktorý je znázornený na obrázku
3.8. Vstupný text je
ikaccbadaccbaccbaccgikmcaib.
Na obrázku má SB veľkosť 9 symbolov, LAB 6 symbolov.
Pokúsime sa zakódovať symboly, ktoré sa nachádzajú v LAB.
Proces začína hľadaním prvého znaku v LAB, teda b
v SB odzadu. Prvú zhodu nájdeme na šiestom políčku odzadu. Ďalej
zistíme, že najdlhšia zhoda, aká existuje, je dĺžky 2 (ba).
Ukazovateľ je potom reprezentovaný trojicou
Dôvod, prečo sa pridáva
Druhý krok začína tým, že sa obe okná posunú o tri symboly doprava,
teda o jeden symbol viac, ako bola v predchádzajúcom kroku nájdená
najdlhšia zhoda. Pri hľadaní zhodného podreťazca v SB, nájde prvú zhodu
na ofsete 1 s dĺžkou 1. Ďalšia
zhoda je na ofsete 4 s dĺžkou 5. Je zaujímavé, že maximálna zhoda
môže presiahnuť hranice SB a tým zasiahnuť aj LAB. Prečo môže byť táto
situácia akceptovateľná, si vysvetlíme pri dekompresii.
Teda dĺžka tejto zhody je 5. Poslednú zhodu nájdeme na offsete 5 s dĺžkou 1.
Keďže sa tu používa GREEDY algoritmus, je vybraná druhá zhoda s dĺžkou 5 a jej
prislúchajúci triplet
V ďalšom kroku sa obe okná posunú o 6 miest doprava. Tento prípad je
znázornený na obrázku 3.8c. Tu nie je nájdená žiadna
zhoda pre symbol Komprimačný proces potom pokračuje podobne ďalej. Všetky možné situácie sú popísané v predchádzajúcich troch krokoch. Proces dekompresie je oveľa jednoduchší, pretože tu už netreba hľadať žiadne zhody ani porovnávať dĺžky. Je znázornený na obrázku 3.9.
V časti (a) obrázku 3.9 je SB rovnaký ako v prvej
časti dekódovania (3.8 (a)). Je v ňom uložený reťazec
Keď dostaneme na vstup triplet
Pri
Triplet
Dekompresiou týchto troch tripletov sme dostali
Záverečné poznámky
Označme si, tak ako už bolo predtým používané, search bufer ako SB,
look-ahead bufer ako LAB, a veľkosť zdrojovej abecedy A. Tiež
predpokladajme, že používame binárne kódovanie. Prístup LZ77 algoritmu
je kódovať postupnosti s rôznou dĺžkou do kódových slov s fixnou
dĺžkou.
Na ofset Pokiaľ sú rozostupy medzi opakujúcimi sa postupnosťami textu príliš veľké, väčšie ako veľkosť oboch bufrov, potom tento algoritmus nie je schopný komprimovať text. Bolo vymyslených veľa modifikácií tohto algortimu, ktoré ho mali zefektívniť. Jednou z nich je LZSS [4]. |
|||
|
|||