29.10.2014 Views

COMPRESIA datelor - GInfo

COMPRESIA datelor - GInfo

COMPRESIA datelor - GInfo

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!