Sunteți pe pagina 1din 10

Algoritmi de compresie din familia Lempel-Ziv-Welch (LZW)

1. Obiectivul lucrrii
n lucrare se va studia codarea, respectiv decodarea, unei secvene de
simboluri emise de o surs discret staionar fr memorie, utiliznd algoritmii de
compresie fr pierderi de tip Lempel-Ziv-Welch (LZW).

2. Introducere teoretic
nainte de a trece la prezentarea fiecrei metode folosite la compresia de date,
sunt necesare cteva precizri despre noiunile i notaiile folosite n lucrare.
Alfabetul sursei este o mulime A, cu J simboluri:
A = {0, 1, ... , J1}.
O secven de lungime N emis de surs este o succesiune de simboluri ale
alfabetului A i se noteaz prin
X(1,N) = x1x2 ... xN.
Un subir al secvenei, care ncepe la poziia i i se termin la poziia j, se scrie
X(i,j) = xixi+1 ... xj.
Se consider c orice secven ncepe cu irul nul, de lungime zero. irurile Xx
i xX reprezint irurile obinute prin adugarea simbolului x la sfritul, respectiv la
nceputul subirului X. Prin tabel de (sub)iruri se nelege o list de (sub)iruri,
fiecare ir avnd o adres n aceast list. irurile sunt nregistrate prin anumite
caracteristici i se gsesc la adrese succesive. Raportul de compresie este raportul
ntre lungimea irului codat i cea a irului surs.
Principiile codrii sunt urmtoarele. Codarea LZ(W) reprezint o abatere de la
concepia clasic de codare, vzut ca o coresponden ntre un set fix de simboluri ale
sursei i un set fix de cuvinte de cod. n codarea LZ(W), irurile de la surs i
cuvintele de cod sunt definite dinamic, pe msur ce se desfoar codarea. Strategia
LZ(W) const ntr-o parcurgere incremental a irului surs, care va fi mprit ntr-o
serie de subiruri de lungime din ce n ce mai mare. n cele ce urmeaz, algoritmii
sunt detaliai fiecare n parte.
2.1. Algoritmul Lempel-Ziv 1977 (LZ77)
Pentru nceput, se vor explica denumirile i noiunile folosite n descrierea
algoritmului:

ir de intrare = secvena de caractere care urmeaz a fi codat;


caracter = elementul de baz (simbolul) din irul de intrare;

Tehnologii i echipamente multimedia lucrri practice

76 8

poziie de codare = poziia caracterului din irul de intrare care tocmai este
codat (nceputul buffer-ului lookahead);
buffer lookahead (privete nainte) = secvena de caractere de la poziia
de codare pn la sfritul irului de intrare (de lungime Ls, lungimea
cuvintelor surs);
fereastr de dimensiune N = subirul care conine N caractere de la poziia
de codare napoi (ultimele N caractere procesate);
pointer = indicatorul care arat potrivirea fa de fereastr i specific
lungimea acestei potriviri;
n = lungimea total a buffer-ului (include buffer-ul lookahead i fereastra).

Algoritmul caut n fereastr cea mai lung potrivire cu nceputul buffer-ului


lookahead i ofer la ieire un pointer ctre acea potrivire. Deoarece este posibil s nu
fie gsit nici mcar o potrivire de caracter, ieirea nu poate fi format doar din
pointer-i. Algoritmul LZ77 rezolv aceast problem n felul urmtor: dup fiecare
pointer, furnizeaz la ieire primul caracter din buffer-ul lookahead dup potrivire.
Deci, dac apare nici o potrivire, la ieire va rezulta un pointer nul i caracterul de la
poziia de codare.
Algoritmul de codare LZ77 decurge n felul urmtor:
Pasul 1.
Pasul 2.
Pasul 3.

Pasul 4.

Se seteaz poziia de codare la nceputul irului de intrare.


Se caut cea mai lung potrivire n fereastr pentru buffer-ul
lookahead.
Se furnizeaz la ieire perechea (P,C) P este pointer-ul ctre
potrivirea din fereastr, iar C este primul caracter din buffer-ul
lookahead care nu se mai potrivete.
Dac buffer-ul lookahead nu este gol, se mut poziia de codare i
fereastra cu L+1 caractere nainte i se reia Pasul 2 (L este numrul
de caractere al potrivirii).

Algoritmul de decodare LZ77 decurge similar:


Pasul 1.
Pasul 2.

Din irul codat se extrag pointer-ul P i lungimea secvenei L.


Se execut L deplasri, n timp ce se ncarc coninutul din poziia
P a buffer-ului n ultima poziie n Ls.

2.2. Algoritmul Lempel-Ziv Storer-Symanski (LZSS)


Algoritmul LZ77 rezolv cazul nepotrivirii n fereastr, punnd la ieire un
caracter explicit dup fiecare pointer. Aceast soluie conine o cantitate de
redundan: fie pointer-ul nul este redundant, fie caracterul de dup fiecare pointer
poate fi inclus n secvena urmtoare.
Algoritmul LZSS, propus de Storer i Syzmansky, rezolv aceast problem
mai eficient, n felul urmtor: pointer-ul este livrat la ieire doar dac indic o
potrivire de lungime mai mare dect lungimea pointer-ului nsui, n caz contrar fiind
livrate la ieire chiar caracterele propriu-zise. Deoarece irul de ieire conine acum
pointer-i i caractere, va fi nevoie de un bit suplimentar pentru a le diferenia.

Algoritmi de compresie din familia Lempel-Ziv-Welch (LZW)

77

Algoritmul de codare LZSS este prezentat n cele ce urmeaz:


Pasul 1.
Pasul 2.

Pasul 3.

Pasul 4.

Poziia de codare este plasat la nceputul irului de intrare.


Se gsete cea mai lung potrivire n fereastr pentru buffer-ul
lookahead:
P este pointer-ul ctre aceast potrivire;
L este lungimea subirului de caractere care se potrivesc.
L > lungimea minim?
DA: la ieire este livrat P, dup care se deplaseaz poziia de
codare cu L simboluri nainte;
NU: la ieire apare primul caracter din buffer-ul lookahead, iar
apoi se deplaseaz poziia de codare cu un caracter nainte.
Dac nu mai exist caractere n irul de intrare, algoritmul se
ntoarce la Pasul 2.

n algoritmul de decodare LZSS, fereastra alunec peste irul de ieire n


acelai fel n care parcurgea irul de intrare la codare. Cnd sunt ntlnite caractere
simple, acestea sunt direct alipite irului decodat.
Acest algoritm obine o rat de compresie mai bun dect LZ77, folosind,
practic, acelai procesor i aceleai resurse de memorie. Decodarea este la fel de
simpl i rapid. Din aceste motive, LZSS este algoritmul de baz pentru dezvoltrile
ulterioare de acest tip.
2.3. Algoritmul Lempel-Ziv 1978 (L78)
Pentru nceput, se vor explica denumirile i noiunile folosite n descrierea
algoritmului:

secven de caractere = secvena de date care urmeaz a fi codat;


caracter = elementul de baz (simbolul) din secvena de caractere;
prefix = secvena de caractere care precede un caracter;
subir (string) = prefixul mpreun cu caracterul care l precede;
cuvnt de cod = elementul de baz din irul codat, reprezentnd un subir
din dicionar;
secven de cod = secven de cuvinte de cod i caractere (ceea ce apare la
finalul algoritmului);
dicionar = tabelul de subiruri; fiecare subir fiind asignat unui cuvnt de
cod, n conformitate cu numrul de index din dicionar;
prefix curent, P = prefixul care tocmai este procesat n algoritmul de
codare;
caracter curent, C = caracterul determinat de algoritmul de codare, n
general, caracterul precedat de prefixul curent;
cuvnt de cod curent, W = cuvntul de cod care este procesat de algoritmul
de decodare.

La nceputul codrii, dicionarul este gol. Pentru clarificarea descrierii


algoritmului, se consider c algoritmul a demarat deja, deci exist subiruri n
dicionar.

Tehnologii i echipamente multimedia lucrri practice

78 8

Se ncepe prin analiza unui nou prefix din secvena de caractere, pornind cu un
prefix gol. Dac prefixul i caracterul care urmeaz (P + C) sunt prezeni sub forma
unui subir n dicionar, prefixul se mrete, acaparnd i caracterul C. Procedeul
continu pn cnd nu se mai ntlnete nici o potrivire cu vreun subir din dicionar.
n continuare, se livreaz la ieire cuvntul de cod reprezentat de prefixul P, iar apoi
caracterul C. Se adug noul subir P + C n dicionar i se continu procesarea noului
prefix din secvena de caractere.
Un caz special este acela n care dicionarul este gol: n acest caz, la ieire va
rezulta un cuvnt de cod special, care reprezint un subir gol, urmat de primul
caracter din secvena de intrare. Acest caracter va fi introdus n dicionar pe post de
subir.
Algoritmul furnizeaz o secven de cuvinte de cod, plus un caracter (W,C).
De fiecare dat cnd apare o pereche la ieirea algoritmului, subirul din dicionar
corespunztor lui W se mrete cu caracterul C, adic apare un nou subir n dicionar,
acesta coninnd deja toate subirurile formate prin nlturarea caracterelor de la
sfritul noului subir.
Algoritmul de codare LZ78 decurge astfel:
Pasul 1.
Pasul 2.

Pasul 3.

La nceput, dicionarul i prefixul curent sunt vide. Fie C noul


caracter din secvena de caractere.
Subirul P + C este prezent n dicionar?
DA: atunci P = P + C;
NU:
a) la ieire va rezulta cuvntul de cod corespunztor lui P
(n cazul n care P este vid, la ieire va aprea caracterul
nul);
b) subirul P + C este adugat n dicionar;
c) P devine gol;
Exist mai multe caractere n secvena de intrare?
DA: salt la Pasul 2;
NU:
a) dac P nu este vid, la ieire va rezulta cuvntul de cod
corespunztor lui P;
b) sfrit.

n algoritmul de decodare LZ78, dicionarul este gol, dar se va reconstrui pe


parcursul procesului. La fiecare pas se citete o pereche (W,C) din secvena de cod, un
cuvnt de cod referindu-se mereu la subirurile prezente n dicionar. Dup ce subirul
corespunztor lui W este decodat, acesta, mpreun cu C, este plasat n dicionar. Dup
decodare, dicionarul va arta la fel ca dup codare.
Avantajul substanial fa de algoritmul LZ77 este numrul redus de
comparaii ntre subiruri n fiecare pas de codare. Rata de compresie este, ns,
similar metodei anterioare. Algoritmul LZ78 i-a pstrat de-a lungul timpului o
importan preponderent teoretic, derivatul acestuia (algoritmul LZW) fiind mult mai
rspndit.
n continuare, este prezentat algoritmul LZW.

Algoritmi de compresie din familia Lempel-Ziv-Welch (LZW)

79

2.4. Algoritmul Lempel-Ziv-Welch 1984 (LZW)


Fa de algoritmul LZ78, apare noiunea de rdcin, care reprezint un subir
de un caracter. Exist o serie de diferene fa de LZ78:
1. la ieire pot aprea doar cuvinte de cod, din acest motiv dicionarul nu
poate fi vid la pornire, el coninnd toate caracterele individuale (rdcini)
care pot aprea n secvena de caractere;
2. deoarece toate rdcinile posibile sunt deja n dicionar, fiecare pas de
codare ncepe cu un prefix de un singur caracter, deci primul subir cutat
are dou caractere;
3. caracterul cu care ncepe noul prefix este ultimul caracter din irul anterior
(C). Acest lucru este necesar pentru a da posibilitatea algoritmului de
codare s reconstruiasc dicionarul fr ajutorul caracterelor explicite din
secvena de cuvinte de cod.
Algoritmul de codare LZW este urmtorul:
Pasul 1.
Pasul 2.

Pasul 3.

La nceput, dicionarul conine toate rdcinile posibile, iar P este


vid. Fie C urmtorul caracter din irul de date.
Subirul P + C este prezent n dicionar?
DA: atunci P = P + C;
NU:
a) la ieire va rezulta un cuvnt de cod care indic prefixul P
din irul codat;
b) subirul P + C este adugat n dicionar;
c) P = C (P conine acum doar caracterul C);
Exist mai multe caractere n secvena de caractere?
DA: salt la Pasul 2;
NU:
a) la ieire va rezulta un cuvnt de cod care reprezint prefixul
P n irul de date;
b) sfrit.

Algoritmul de decodare decurge similar. Aceast metod este foarte des


utilizat n practic. Avantajul fa de algoritmii bazai pe LZ77 este viteza, deoarece
nu sunt multe comparaii de efectuat. Problema care rmne este legat de cutarea
irurilor n dicionar. Variantele derivate ale acestui algoritmului folosesc lungime
variabil a cuvntului de cod (dependent de lungimea curent a dicionarului) i
recurg la tergerea subirurilor vechi din dicionar.
Exemplu. La una din metodele derivate din LZW, tabelul de subiruri are, n
plus, urmtoarea proprietate: dac un ir xY este n tabel, atunci i subirul Y este n
tabel. Un ir este reprezentat n tabelul de iruri prin:
PRE adresa din tabel a subirului obinut prin tergerea ultimului simbol
din irul curent;
SUF adresa din tabel a subirului obinut prin tergerea primului simbol;
LEN lungimea subirului curent,
FIN ultimul simbol al subirului curent.
Alt derivat se obine adugnd restricia: pentru orice adres din tabel S, SUF(S) < S.

80 8

Tehnologii i echipamente multimedia lucrri practice

3. Descrierea evoluiei programului


Se lanseaz programul Metode.exe. Din fereastra de dialog care conine
meniul principal se lanseaz, pe rnd, programele demonstrative corespunztoare
fiecrei metode de compresie studiate n lucrare.
n continuare, sunt enumerate i explicate elementele de interfa ale
modulelor respective.
3.1. Dialogul LZ77 i dialogul LZSS
Datorit faptului c cele dou module sunt asemntoare, interfeele grafice de
dialog cu utilizatorul pentru algoritmul LZ77 i pentru algoritmul LZSS vor fi tratate
mpreun.
Figura 1 prezint modul de funcionare al ferestrei de dialog LZ77 la operaia
de codare.

Fig. 1 Dialogul LZ77 codarea.

Algoritmi de compresie din familia Lempel-Ziv-Welch (LZW)

81

Figura 2 prezint modul de funcionare al ferestrei de dialog LZ77 la operaia


de decodare.

Fig. 2 Dialogul LZ77 decodarea.

3.2 Dialogul LZ78 i dialogul LZW


Datorit faptului c cele dou module sunt asemntoare, interfeele grafice de
dialog cu utilizatorul pentru algoritmul LZ78 i pentru algoritmul LZY vor fi tratate
mpreun.
Figura 3 prezint modul de funcionare al ferestrei de dialog LZW la operaia
de codare.
Figura 4 prezint modul de funcionare al ferestrei de dialog LZW la operaia
de decodare.

82 8

Tehnologii i echipamente multimedia lucrri practice

Fig. 3 Dialogul LZW codarea.

4. Desfurarea lucrrii
Se ruleaz programele demonstrative pentru fiecare dintre cele 4 metode
studiate. Se definesc sursele i parametrii de codare, iar apoi se introduc diferite
secvene i se compar rezultatele obinute, n funcie de lungimea secvenelor i de
numrul de simboluri ale sursei.
Se modific parametrii de codare i se
reia codarea. Rezultatele sunt afiate ntr-o
fereastr de dialog nemodal, putnd fi
pstrate pe ecran pentru comparaie rezultate
de la diferite sesiuni de codare. Sunt afiate
secvena original, cea codat, lungimile
acestora i raportul de compresie obinut. Se
noteaz cte un set complet de date pentru
fiecare algoritm.

Algoritmi de compresie din familia Lempel-Ziv-Welch (LZW)

83

Fig. 4 Dialogul LZW decodarea.

5. ntrebri
1. Ce aduc n plus algoritmii de compresie de tip LZW fa de algoritmii
clasici de compresie fr pierderi?
2. Care sunt principalele caracteristici ale codrii LZ77?
3. Ce se ntmpl cu raportul de compresie la codarea LZ77, atunci cnd
lungimea cuvntului surs este meninut constant, iar lungimea
buffer-ului
crete. De ce?
4. Ce mbuntiri aduce metoda LZSS fa de algoritmul LZ77, din care
provine aceasta?
5. Care sunt elementele suplimentare aduse de algoritmul LZ78 fa de
metodele precedente?
6. Ce avantaje prezint algoritmul LZW fa de algoritmul LZ78?
7. Ce se ntmpl cu raportul de compresie la metodele LZ78 i LZW, atunci
cnd lungimea secvenei surs crete? De ce?

84 8

Tehnologii i echipamente multimedia lucrri practice

8. La algoritmul LZW, cum variaz viteza de cretere a tabelului de subiruri


n funcie de secvena de intrare?
9. Exist vreo legtur ntre viteza de cretere a tabelului de subiruri i
raportul de compresie? Care?
10. Se introduce o secven de intrare caracterizat de urmtorii parametri:
alfabetul sursei de dimensiune J = 10, lungimea secvenei N = 100. Secvena poate fi
oarecare. Pentru algoritmii LZ77 i LZSS, s se studieze dependena raportului de
compresie fa de lungimea buffer-ului n i fa de lungimea cuvintelor surs Ls.
11. Calculai raportul de compresie pentru o secven de 100 de simboluri 1,
codat prin toate cele 4 metode.
12. Idem, pentru o secven cu 50 de simboluri 0 i 50 de simboluri 1, n
variantele:
a) primele 50 de simboluri sunt 0, ultimele 50 de simboluri sunt 1;
b) 50 de celule repetitive cu structura 01.
13. Care dintre algoritmii studiai a obinut cea mai bun compresie?
14. Ce concluzie se poate trage n legtur cu influena asupra raportului de
compresie a entropiei sursei n sensul lui Shannon? Dar a informaiei algoritmice n
sensul SKC?
15. Dai exemple de standarde de comunicaie i de programe de arhivare care
utilizeaz algoritmi de compresie din familia LZW.

S-ar putea să vă placă și