You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
se iniþializeazã n cu o constantã<br />
se iniþializeazã L S<br />
cu o constantã<br />
se iniþializeazã T<br />
w ← Citeºteªir(S, L S<br />
)<br />
Transmite(E, w)<br />
T ← Primele(T, n - L S<br />
)+w<br />
dacã nu Genereazã(S) atunci<br />
ieºire<br />
sfârºit dacã<br />
cât timp Genereazã(S) executã<br />
w ← ""<br />
cât timp Genereazã(S) ºi Gãsit(T, w) executã<br />
c ← CiteºteSim(S)<br />
w ← w+c<br />
sfârºit cât timp<br />
i ← Lungime(w)<br />
p ← Poziþie(T, Primele(w, i - 1))<br />
Transmite(E, p, i - 1, c)<br />
T ← Ultimele(T, n - i) + w<br />
sfârºit cât timp<br />
În figura 1 este ilustrat modul în care se realizeazã<br />
compresia unui ºir de simboluri folosind metoda LZ77. Se<br />
poate observa foarte uºor felul în care este actualizat ºirul<br />
de simboluri T ºi cum variazã ºirul w la fiecare pas. Pasul 0<br />
reprezintã pasul de dinaintea instrucþiunii repetitive cât<br />
timp.<br />
Figura 1: Exemplu de compresie cu LZ77<br />
Algoritmul de decompresie<br />
Algoritmul de decompresie pentru metoda LZ77 constã în<br />
interpretarea ºirului comprimat de simboluri generate de o<br />
sursã de informaþie S.<br />
Iniþial se citesc L S<br />
simboluri care se transmit ºi sunt<br />
stocate ºi pe ultimele L S<br />
poziþii ale ºirului T de lungime n.<br />
În continuare, la fiecare pas se citeºte un triplet (p, i, c),<br />
se transmit i simboluri din T începând cu poziþia p, se<br />
transmite simbolul c, T se deplasezã la stânga cu i + 1 poziþii<br />
ºi ultimele i + 1 poziþii din T se completeazã cu ºirul<br />
obþinut din cele i + 1 simboluri transmise.<br />
În pseudocod acest algoritm este:<br />
se iniþializeazã n cu o constantã<br />
se iniþializeazã L S<br />
cu o constantã<br />
se iniþializeazã T<br />
w ← Citeºteªir(S, L S<br />
)<br />
Transmite(E, w)<br />
T ← Primele(T, n - L S<br />
)+w<br />
dacã nu Genereazã(S) atunci<br />
ieºire<br />
sfârºit dacã<br />
cât timp Genereazã(S) executã<br />
p ← CiteºteNum(S)<br />
i ← CiteºteNum(S)<br />
c ← CiteºteSim(S)<br />
w ← Primele(Ultimele(T, n - p), i) + c<br />
Transmite(E, w)<br />
T ← Ultimele(T, n - i - 1) + w<br />
sfârºit cât timp<br />
Observaþii<br />
Complexitatea algoritmului de compresie este O(n · nr),<br />
unde nr este numãrul de simboluri generate de sursa de informaþie<br />
S, deoarece funcþia de cãutare a unui subºir întrun<br />
ºir are complexitatea O(n) ºi modificarea ºirului T se<br />
realizeazã în maxim O(n) paºi, în funcþie de algoritmul<br />
utilizat (dacã se utilizeazã un ºir circular, modificarea poate<br />
avea loc în O(1) paºi).<br />
Complexitatea algoritmului de decompresie este O(nr)<br />
în cazul în care modificarea ºirului T se face în O(1) paºi ºi<br />
construirea lui w se face la fiecare pas folosind O(i) instrucþiuni.<br />
În general ºirul T de simboluri poartã numele de fereastrã<br />
mobilã, acest algoritm fiind cel mai simplu algoritm<br />
de compresie din clasa algoritmilor de compresie cu<br />
ferestre mobile. Dicþionarul în cazul algoritmului LZ77<br />
este constituit chiar de fereastra mobilã T.<br />
Din cauzã cã ºirul T este format numai din ultimele n<br />
simboluri generate de sursa de informaþie S algoritmul<br />
LZ77 nu este optim, deoarece nu mai apar referinþe la codificãri<br />
anterioare deci, dacã mai apare un ºir de simboluri<br />
care trebuie codificate identic cu un ºir codificat anterior,<br />
se întâmplã destul de des sã nu fie codificat în aceeaºi manierã<br />
(folosind un singur triplet (p, i, c)) fapt care duce la<br />
creºterea lungimii codificãrii întregului ºir de simboluri<br />
generate de sursa S. Din acest motiv, cercetãtorii Abraham<br />
Lempel ºi Jacob Ziv au renunþat la fereastra mobilã ºi în<br />
anul 1978 au realizat o nouã implementare în care dicþionarul<br />
de compresie era constituit de ºirurile de simboluri<br />
codificate anterior.<br />
LZ77 este un algoritm fundamental de compresie a<br />
<strong>datelor</strong> ºi stã la baza clasei de algoritmi de compresie cu<br />
fereastrã mobilã, în timp ce LZ78 este baza unei noi clase<br />
de algoritmi de compresie.<br />
Metoda LZSS<br />
În cazul metodei LZ77, se observã foarte uºor cã dacã ultimul<br />
ºir de simboluri w i-1<br />
care se regãseºte în ºirul T este<br />
43<br />
serial<br />
<strong>GInfo</strong> nr. 13/3 - martie 2003