Sunteți pe pagina 1din 6

ALGORITMI DE COMPRESIE FOLOSII 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
2.1. Noiuni generale despre compresie Compresia este procesul de minimizare a spaiului ocupat sau a timpului necesar transmiterii unei anumite cantiti de informaie. Metodele de compresie pot fi mprite n: -metode de compresie cu pierdere; -metode de compresie fr pierdere. Metodele de compresie cu pierdere de informaie sunt folosite n special n transmisia semnalului audio i video, unde pierderea de informaie are ca rezultat o scdere a calitii sunetului, respectiv imaginii, ele neconstituind obiectul prezentei lucrri. Conceptul de compresie de date fr pierdere pare imposibil la prima vedere, dar o analiz mai atent face ca aceast idee, de compresie fr pierdere, s aib sens. Astfel, dac ne gndim la prescurtrile din viaa de zi cu zi (abrevieri: prof., etc., CEC, .a.) acestea apar ca o form primitiv a compresiei de date. Compresia de date fr pierdere, prezent n programele de arhivare, n sistemele de transmisiune a datelor, a evoluat de-a lungul timpului pornind de la algoritmi simpli (suprimarea zerourilor, codarea pe iruri) i ajungnd la algoritmii compleci folosii n prezent. Avantajele compresiei sunt: -reducerea spaiului necesar depozitrii unei cantiti de informaie; -scderea timpului de transmitere a unor mesaje, ceea ce duce la scderea costului per mesaj i posibilitatea creterii traficului ntr-o reea de transmisiuni. Aceast scdere a timpului este efectul direct al micorrii cantitii de informaie, dar i efectul indirect al micorrii pierderilor de timp datorate protocoalelor de comunicaie. - scderea timpului de rulare a unui program datorit timpului de acces la disc. Metodele de compresie fr pierderi au la baz ideea c, n general, cantitatea de informaie prelucrat (transmis, depozitat) conine o anumit redundan care se datoreaz: -distribuiei caracterelor (unele caractere au o frecven de apariie mult mai mare dect altele); -repetrii consecutive a unor caractere; -distribuiei grupurilor de caractere (unele grupuri sunt mult mai frecvente dect altele i n plus exist grupuri care nu apar deloc); - distribuiei poziiei (unele caractere sau grupuri ocup poziii prefereniale, predictibile n anumite blocuri de date). Avnd n vedere toate aceste tipuri de redundane putem nelege de ce o anumit tehnic de compresie poate da un rezultat bun pentru un anumit tip de surse, pentru altele ns rezultatul poate fi dezastruos. De aici este uor de neles c noile direcii n studiul compresiei urmresc obinerea unui algoritm care s ofere o compresie ct mai bun pentru tipuri de surse ct mai diferite.

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. 2.2. Clasificarea algoritmilor de compresie fr pierderi: Algoritmii de compresie de date fr pierdere pot fi ncadrai n una din urmtoarele categorii: -Algoritmi statici, care se bazeaz pe o statistic bine cunoscut a sursei i dau rezultate bune n cazul n care sursele au o statistic asemntoare cu cea presupus. n caz contrar, rezultatul poate fi o extensie n loc de o compresie. -Algoritmi semiadaptivi sau n dou treceri, algoritmi care folosesc statistica simbolurilor mesajului, statistic ce se obine printr-o parcurgere iniial a ntregului mesaj. Aceti algoritmi ofer rezultate pentru orice tip de surs, dar nu pot fi folosii ntr-o transmisiune. -Algoritmi adaptivi, care sunt de obicei cei mai potriviti pentru orice tip de surs. Tehnicile adaptive au ca idee construirea unui "dicionar de codare" al simbolurilor mesajului, paralel cu codarea pentru compresie a mesajului. Acest dicionar se va construi identic la recepie, pe baza informaiei recepionate. Lucrarea va prezenta cteva din cele mai folosite metode de compresie fr pierderi. 2.3. Algoritm Huffman static Codarea Huffman static binar Algoritmul Huffman (1952) constituie un algoritm optimal, n sensul c nici un alt algoritm nu asigur o mai mic lungime medie a cuvintelor. Sunt situaii n care i ali algoritmi pot da o lungime medie egal cu cea dat de algoritmul Huffman, dar niciodat mai mic. Paii algoritmului sunt: 1. Ordonarea mesajelor sursei n ordinea descresctoare a probabilitilor. 2. Formarea din ultimele dou mesaje a unui mesaj restrns r1 = sM 1 sM avnd

p (r1 ) = p ( sM 1 ) + p ( sM ) 3. Includerea mesajului r1 n mulimea celorlalte mesaje, n ordinea descresctoare a probabilitilor, alctuind irul ordonat R1. 4. Repetarea algoritmului de restrngere pn cnd ultimul ir ordonat Rk conine doar dou mesaje. 5. Cuvintele de cod corespunztoare fiecrui mesaj se obin n felul urmtor: - simbolului rk-1 i se aloca '0', iar lui rk '1' - la fiecare diviziune n dou se aloc, n aceeai ordine ca la prima diviziune, simbolurile '0' sau '1' i operaia se continu pn cnd se ajunge la mulimi formate dintr-un singur mesaj. Exemplu: a) S se codeze prin algoritmul Huffman binar sursa caracterizat de urmtoarea distribuie: s2 s3 s4 s5 s6 s1 S : 0.3 0.25 0.15 0.15 0.10 0.05 b) S se determine eficiena codrii i factorul de compresie. 38

Soluie: S pi ci R1 R2 Restrngeri R3 R4

s1 s2 s3 s4 s5 s6
6 i =1

0.3 0.25 0.15 0.15 0.10 0.05

00 10 11 010 0110 0111

0.3 0.25 0.15 0.15 010 0.15 011

0.3 0.3 0.25 10 0.15 11

0.4 0.3 00 0.3 01

0.6 0 0.4 1

b) n = pi ni = 2.45 - lungimea medie a cuvintelor de cod

H ( S ) = pi log 2 pi = 2.39 - entropia sursei informaionale S.


i =1

2.39 = = 0.98 = 98% - eficiena codrii 2.45

3 = 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. Fc = =
2.4. Algoritm Huffman dinamic. Se pornete de la premiza c varianta static a algoritmului de compresie Huffman este bine neleas. Ideea de baz n codarea Huffman dinamic este folosirea pentru codarea simbolului ti+1 din mesaj, a unui arbore de codare (un dicionar de codare sub forma unui arbore binar) construit pe baza primelor i simboluri din mesaj. Dup transmiterea simbolului ti+1 se va revizui arborele de codare n vederea codrii simbolului ti+2. Exist mai multe variante ale algoritmului Huffman dinamic (FGK, ) care difer ntre ele prin modul de construcie al arborelui. n continuare vom prezenta algoritmul de compresie, ilustrndu-l cu exemplul din figura 1. Procedura general de compresie pentru codarea Huffman dinamic are urmtorul algoritm: 1. iniializez arborele de codare cu un nod rdcin; 2. transmit primul simbol n clar (de exemplu codul ASCII al simbolului); 3. construim nc dou noduri (frunze) care pornesc din nodul rdcin, unul la stnga, care nu conine nici un simbol, cruia i atam ponderea nul (frunz goal) i unul la dreapta care conine simbolul aprut, ponderea acestuia devenind egal cu 1; 4. citim urmtoarea liter din mesaj;

nu

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. Procedura de reactualizare arbore FGK: Obs. n cele ce urmeaz ne vom referi prin noiunea de nod frunz la un nod terminal din arbore.
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

Ramur stnga codat cu 0

Ramur dreapta codat cu 1

Arbore dup b

1
2

a
Nod frunz ce corespunde caracterelor folosite n mesaj

5 3 1
0 1

4 2
1

0
Frunz 0

Numrul de ordine al nodului n arbore

Pondere nod (egal cu numrul de apariii ale 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 5
2

7 6
1

a
Interschimbare noduri

3 1
0

4 2
1

b 1

3
0

4 2
1

Arbore dup b Caracter asociat frunzei

7 5
2

7 5
1

3 1
0

4 2
1

b 1

3
0

4 2
1

Figura 1. Evoluia arborelui Huffman FGK n cazul codrii mesajului abcb Secvena binar obinut este a0b00c11 (a,b,c reprezint cei 8 bii ai codului ASCII)
41

3 1
0

Caracterul b nu este n arbore, de aceea nodul q este nodul nul din care se creeaz cele doua noduri fii de pondere nul

5 3
0 0

4 2
0

5
Ilustrarea pasului n care se efectueaz incrementarea ponderilor n nod

Tot n acest pas se efectueaz incrementarea numrului de ordine al celorlalte noduri deja existente

1 4
1

3
0

Figura 2. Reactualizarea arborelui la citirea primului simbol b 3. Desfurarea lucrrii


a) Fie sursa informaional S caracterizat de distribuia s4 s5 s6 s1 s 2 s3 S : 0.1 0.2 0.3 0.15 0.05 0.2 . S se realizeze o codare binar Huffman static i apoi s se calculeze eficiena codrii i factorul de compresie. b) Pentru secvena abcdeaa desenai evoluia arborelui de codare dinamic Huffman FGK i determinai secvena binar codat. Calculai raportul de compresie obinut. c) Folosind programul de simulare Huffman FGK introducei secvena de la punctul b) i urmrii evoluia arborelui i a mesajului codat n concordan cu rezolvarea de la punctul b).

42

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