Documente Academic
Documente Profesional
Documente Cultură
1. Obiectivul lucrrii
Scopul acestei lucrri este prezentarea modului de implementare a algoritmilor
Huffman adaptivi FGK i Vitter.
2. Introducere teoretic
Termenul de compresie a datelor a aprut n contextul n care se manifesta o
necesitate evident de a atinge rate mari de transfer n reele sau de a stoca o cantitate
ct mai mare de informaii folosind ct mai puin spaiu. Compresia datelor este
necesar n zilele noastre i este foarte des folosit, mai ales n domeniul aplicaiilor
multimedia.
Codurile Huffman rezolv problema gsirii unui tabel optim al cuvintelor de cod
pentru simboluri cu distribuie arbitrar a probabilitii. n aceast lucrare, se vor
folosi urmtoarele convenii. irul de caractere necomprimate va fi mesajul i
alfabetul su va fi alfabetul original sau alfabetul mesajului. Ieirea comprimat va fi
alctuit din simbolurile rezultate. Se va numi (cuvnt de cod) un ir de simboluri
rezultate, asociate unui simbol din mesaj, iar tabelul cuvintelor de cod va fi setul
codurilor asociate tuturor simbolurilor din alfabetul mesajului. Un tabel al cuvintelor
de cod poate fi vzut ca o funcie F care asociaz simbolurile din mulimea A,
alfabetul mesajului, cu cele din submulimea B, a tuturor irurilor (care au elemente)
unic determinate, formate din alfabetul rezultat B.
Huffman, n lucrarea sa de referin din 1952, prezint procedura de construire a
codurilor optimale de lungime variabil, dndu-se o distribuie cu frecven arbitrar
pentru un alfabet finit. Aceast procedur este construit pe baza ctorva condiii care,
dac sunt satisfcute, produc un tabel optimal al cuvintelor de cod.
Primele condiii sunt dup cum urmeaz:
a) nici un cod de cod nu este prefixul altui cuvnt de cod;
b) nu este necesar nici o informaie suplimentar ca delimitator ntre coduri.
Aceste dou cerine conduc la formularea urmtoarelor trei:
c) L(a1) L(a2) ... L(an), unde L(an) este lungimea cuvntului de cod an.
d) dou cuvinte de cod au lungimea Lmax i sunt identice, n afara ultimului bit.
e) Fiecare cuvnt de cod posibil de lungime Lmax1 ori este deja folosit, ori are
unul din prefixele sale folosit drept cuvnt de cod.
Un arbore Huffman este un arbore binar cu noduri ponderate care are
proprietatea de fraternitate, iar ponderea unui nod printe este egal cu suma
ponderilor urmailor si direci. Fiecare nod al arborelui Huffman este caracterizat de
3 parametri: ponderea asociat, poziia sa n cadrul arborelui i tipul su. n cazul
codrii Huffman, este necesar s se creeze mai nti un dicionar. Acest dicionar
conine caracterele distincte aflate n textul dat, fiecrui caracter asociindu-i-se o
pondere (calculat ca raportul dintre numrul de apariii al acelui caracter n mesaj i
lungimea mesajului), iar ulterior, n urma executrii algoritmului, cuvintele de cod
formate pentru fiecare caracter. Caracterele distincte se ordoneaz n ordinea
descresctoare a ponderilor.
66 8
67
68 8
nr _ ap(ai )
,
L
unde P(ai) reprezint ponderea caracterului ai, nr_ap(ai) reprezint numrul de apariii
a caracterului ai i L reprezint lungimea textului. Ponderile calculate trebuie s
ndeplineasc condiia:
k
P(ai ) 1 ,
i 1
69
se iau primele dou elemente ale listei (adic, cele cu ponderile cele mai
mici), cu care se creeaz un arbore format din cele dou noduri ca urmai i
un printe, cu valoarea (ponderea) egal cu suma ponderilor celor doi urmai
(n stnga se afl nodul cu ponderea cea mai mic);
primele dou elemente ale listei cu care s-a format arborele sunt terse din
list i se introduce un element nou, printele format, locul su n list fiind
n funcie de valoarea sa, astfel nct lista s fie n permanen ordonat
cresctor;
se continu algoritmul pn cnd n list nu mai exist nici un element,
arborele fiind astfel creat.
Se apeleaz procedura de desenare a arborelui, acesta putnd fi vizualizat n
cadrul panoului din dreapta. n cazul n care nu se ncadreaz n ecran, exist bare de
defilare (scroll) n partea de jos i n dreapta panoului, sau se poate mri panoul n
cadrul cruia se deseneaz, cu ajutorul butonului mrete, aflat n stnga sus, n cadrul
panoului.
La acionarea celui de-al treilea buton (codare Huffman) apare cea de-a treia
coloan n stnga panoului, n cadrul creia se afieaz cuvntul de cod obinut pentru
fiecare caracter.
Fiecare nod care are urmai are n stnga o sgeat pe care este trecut valoarea
0, iar n dreapta valoarea 1. Cuvntul de cod pentru fiecare caracter se formeaz
citind, de la rdcin pn la nodul terminal asociat caracterului respectiv, valorile 0,
respectiv, 1, pe drumul cel mai scurt. Lungimea cuvntului de cod respectiv este egal
cu adncimea la care se afl nodul terminal. Adncimea rdcinii (primul nod printe)
este 0 i crete cu o unitate pentru fiecare generaie (fiecare rnd de sus n jos). Toate
codurile astfel obinute se trec pe a doua coloan a matricei care reprezint
dicionarul.
Cuvntul de cod va fi format nlocuind fiecare caracter din text cu codul obinut
n urma algoritmului Huffman. Acest cuvnt de cod va fi transmis pe pagina
principal, unde se vor mai calcula lungimea codului, lungimea medie a codului,
entropia sursei i eficiena codrii, dup cum urmeaz:
lungimea codului este numrul de bii care formeaz cuvntul de cod;
lungimea medie a codului este dat de formula:
k
H (S )
.
Li
Butonul napoi terge elementele create pentru a putea relua aplicaia pentru un
alt text i nchide fereastra codrii Huffman, ntorcndu-se la fereastra principal.
70 8
71
72 8
Dac este acionat n continuare primul buton i dup codarea ntregului text,
apare mesajul Textul a fost codat n ntregime. Dac se dorete reluarea
algoritmului pentru un alt text sau chiar pentru acelai text, este necesar ntoarcerea
n fereastra principal, ceea ce se poate realiza apsnd butonul napoi.
Cel de-al doilea buton, napoi, terge elementele create pentru a putea relua
aplicaia pentru un alt text i nchide fereastra codrii curente, ntorcndu-se la
fereastra principal. Tot aici se transmit ctre fereastra principal (unde vor fi afiai)
parametrii codrii, i anume: cuvntul de cod format, lungimea codului, lungimea
medie a cuvintelor de cod, entropia sursei i eficiena codrii.
73
chiar dac un caracter citit este deja prezent n arbore, nodul asociat acestui
caracter i schimb poziia, lund locul nodului terminal cu aceeai valoare
i cu indexul cel mai mare, toate celelalte noduri cu indexul mai mic dect
indexul nodului nou ocupat mutndu-se pe nodul cu indexul cu o unitate mai
mic, pn se ajunge la nodul modificat prin apariia caracterului considerat;
nodurile terminale preced nodurile interne;
valorile indecilor nodurilor sunt cresctoare de jos n sus i de la stnga la
dreapta, fa de cazul FGK, unde nu se respect ordinea la fiecare nivel;
adncimea arborelui trebuie s fie minim.
Fereastra pentru codarea Vitter, care poate fi observat n figura 6, are aceleai
componente i este construit la fel ca fereastra pentru codarea FGK.
4. Desfurarea lucrrii
1.
2.
3.
4.
74 8
5. ntrebri
1. Cum se realizeaz compresia de date prin algoritmii de tip Huffman?
2. Care sunt paii algoritmului FGK?
3. Care sunt paii algoritmului Vitter?
4. Care sunt deosebirile ntre modul de formare al arborelui FGK i al arborelui
Vitter?
5. Care dintre algoritmii studiai este recomandat pentru compresia unei surse
staionare? Dar n cazul n care sursa prezint aglomerri locale de simboluri (surs
nestaionar)? Explicai alegerea fcut.
6. Cum ar trebui s arate un text care s poat profita la maximum de aceast
familie de metode de compresie?
7. Dai un exemplu de text cu rat de compresie bun.
8. Dai un exemplu de text cu compresie slab. Explicai alegerea fcut.
9. Rulai cei trei algoritmi pentru acelai text. Ce observai?
10. Comparai eficiena codrii Huffman pentru un text cu dou caractere
distincte i pentru un alt text cu 10 caractere distincte, ambele avnd acelai numr
total de caractere. Ce observai?
11. Cum se modific rspunsurile de mai sus n cazul aplicrii algoritmilor FGK
i Vitter?
12. Care dintre cei trei algoritmi este mai eficient i de ce?