Documente Academic
Documente Profesional
Documente Cultură
Algoritmi de Compresie Folositi În Sistemele Moderne de Arhivare - Codarea Huffman
Algoritmi de Compresie Folositi În Sistemele Moderne de Arhivare - Codarea Huffman
1. Obiectul lucrrii
Lucrarea i propune familiarizarea cu unii dintre algoritmii de compresie cei mai utilizai
(Huffman static, Huffman dinamic varianta FGK), precum i prezentarea unui program de
simulare pe calculator care ilustreaz modul de compresie.
2. Noiuni teoretice
37
Aprecierea cantitativ a compresiei realizate se face utiliznd factorul de compresie
n
definit ca: Fc = u , unde nu este lungimea n bii a mesajului iniial i nc lungimea dup
nc
H (S )
compresie, precum i prin eficiena codrii definit prin = , unde H(S) reprezint
n log 2 m
entropia sursei informaionale ce este codat, m reprezint numrul simbolurilor din alfabetul de
codare iar n reprezint lungimea medie a cuvintelor.
Exemplu:
S pi ci Restrngeri
R1 R2 R3 R4
0.6 0
0.4 0.4 1
s1 0.3 00 0.3 0.3 0.3 00
0.3 0.3 01
s2 0.25 10 0.25 0.25 10
s6 0.05 0111
6
b) n = pi ni = 2.45 - lungimea medie a cuvintelor de cod
i =1
6
H ( S ) = pi log 2 pi = 2.39 - entropia sursei informaionale S.
i =1
2.39
= = 0.98 = 98% - eficiena codrii
2.45
3nu
Fc = = 1.22 - factorul de compresie iar nu se obine din relaia nu = log 2 M , M
=
n 2.45
fiind numrul de mesaje din sursa S, x reprezint cel mai mic ntreg mai mare sau egal cu x.
39
5. dac litera este deja n arbore transmit codul ei din arbore. Codul literii din arbore se
formeaz citind simbolurile de '0' respectiv '1' ataate ramurilor, pornind de la nodul rdcin
pn la nodul n care se afl litera. Simbolurile de '0' respectiv '1' se ataeaz ramurilor astfel:
toate ramurile din dreapta vor avea ataate simbolul '1', iar toate ramurile din stnga vor avea
ataate simbolul '0'. Apoi se trece direct la pasul 7;
6. dac litera nu este n arbore atunci transmit codul nodului terminal care nu conine nici
un simbol (frunz goal) urmat de codul n clar(ASCII) al literei. Codul nodului fr nici o liter
se formeaz ca i n cazul nodului care conine o liter;
7. reactualizez arborele; dac mesajul s-a terminat, atunci codarea este terminat, iar n caz
contrar relum procedeul ncepnd cu pasul 4.
OBS. Diferitele variante de codare dinamic difer doar prin modul de reactualizare al arborelui
(tabelei de decodare).
Procedura general de decompresie pentru codarea Huffman dinamic are urmtorul algoritm:
1. iniializez arborele de codare cu un nod rdcin;
2. citesc primul simbol transmis n clar (codul ASCII al simbolului);
3. transmit litera mai departe;
4. construim nc dou noduri care pornesc din nodul rdcin, unul la stnga, care nu
conine nici un simbol, cruia i atam ponderea nul i unul la dreapta care conine simbolul
aprut, ponderea acestuia devenind egal cu 1;
5. citesc codul transmis (bit cu bit) pn cnd codul se afl n arbore, adic pn cnd am
ajuns la un nod frunz; nod frunz = nod care se afl n arbore pe ultimul nivel de ierarhie;
6. dac nodul ataat codului citit este un nod care nu conine nici un simbol citesc litera
transmis n clar i o transmit mai departe, apoi trecem direct la pasul 8;
7. dac nodul ataat codului citit conine un simbol atunci decodez codul ataat lui prin
litera pe care o conine i transmit litera mai departe (la utilizator);
8. reactualizm arborele; dac mesajul s-a terminat, atunci decodarea este terminat, iar n
caz contrar relum procedeul ncepnd cu pasul 5.
Varianta FGK:
n continuare vom prezenta algoritmul de reactualizare al arborelui penru varianta FGK
(Faller, Gallager, Knuth). Vaianta FGK urmrete minimizarea jwjlj (sum ce reprezint
lungimea n bii a mesajului codat), unde wj reprezint ponderea frunzei j asociat simbolului j
(numrul de apariii ale simbolului j), iar lj lungimea codului asociat frunzei respective. Dac
reactualizarea arborelui se face dup procedeul de mai jos atunci aceast minimizare este
satisfcut.
1. Se presupune c suntem la pasul algoritmului Huffman dinamic n care s-a citit simbolul ti.
Notm cu q nodul frunz corespunztoare simbolului ti dac acesta este deja n arbore, sau frunz
goal dac simbolul nu este nc n arbore;
2. Dac q este frunz goal atunci nlocuiesc nodul respectiv cu un nod printe i dou noduri
derivate (noduri fii) din acesta care nu conin nici un caracter (sunt noduri nule, de pondere nul),
cele trei noduri nou create se noteaz astfel: nodul din stnga cu 1, nodul din dreapta cu 2 iar
nodul printe cu 3. Se incrementeaz numrul de ordine al celorlalte noduri. Apoi se noteaz cu q
nodul derivat din dreapta tocmai creat. Tot acestui nod i se asociaz i simbolul citit ti care nu
este n arbore;
40
3. Ponderea nodului q cruia i s-a asociat simbolul citit ti se incrementeaz cu o unitate. Se
modific ponderea nodurilor intermediare i a nodului rdcin astfel nct aceasta s fie egal cu
suma ponderilor fiilor si. Se schimb nodul q cu nodul de pondere cea mai mic i cu cel mai
mare numr de ordine dac exist situaii de acest tip pn cnd se ajunge la nodul rdcin.
Arbore iniial
Arbore dup a
1 0 0 2 1 a
Arbore dup b
Nod frunz ce
corespunde
5 2
caracterelor folosite n
mesaj
3 1 4 1 a Numrul de
ordine al
nodului n
arbore
1 0 0 2 1 b
Pondere nod (egal cu numrul de apariii ale
Frunz 0 caracterului n mesaj n cazul nodurilor frunz,
sau cu suma ponderilor nodurilor derivate din
acel nod n cazul nodurilor intermediare)
Arbore dup c
2 7 3
7
5 2 6 1 a 5 1 a 6 2
Interschimbare
noduri
1 1 3 1 4 1 b
3 4 b
0 1 1 0 2 1 c
1 0 2 c
Arbore dup b
Caracter asociat
frunzei
7 4
7 3
5 2 b 6 2
5 1 a 6 2
3 1 4 1 a
3 1 4 2 b
1 0 2 1 c
1 0 2 1 c
41
Caracterul b nu este
3 1
n arbore, de aceea 5 1 Tot n acest pas
nodul q este nodul nul se efectueaz
din care se creeaz incrementarea
1 0 0 2 1 a cele doua noduri fii de numrului de
pondere nul 3 0 4 1 a ordine al
celorlalte noduri
deja existente
5 2 1 0 0 2 0 b
Ilustrarea pasului n
care se efectueaz 3 1 4 1 a
incrementarea
ponderilor n nod
1 0 0 2 1 b
3. Desfurarea lucrrii
42