Sunteți pe pagina 1din 17

LaboratorPS Algoritmidecompresieadatelor

Lucrare1:IntroducerenCompresiaDatelor Lucrare2:AlgoritmulShannonFano Lucrare3:AlgoritmulHuffmanstatic Lucrare4:AlgoritmulHuffmandinamic


Prof.Dantefnoiu<dan.stefanoiu@acse.pub.ro> .l.AlexandruDumitracu<alexandru.dumitrascu@acse.pub.ro>
CD#41/17

A.Obiective
Implementarea Algoritmului de compresiedinamic al lui Huffman. Testarea performanei acestuia, prin comparaie cu cele ale Algoritmilor ShannonFano, Huffman statici ale programelor de uz general WinZIPi WinRAR.

B.Suportteoretic
Performanele algoritmilor de compresie bazai pe modele statistice de tip static (neadaptiv) sunt limitate. Pentru a le ameliora, n loc s se efectueze construcia modelului statistic la sfritul citirii ntregului set de date, aceasta se realizeaz din mers, adic n cursul citirii datelor. Au fost elaborate, n acest fel, metode de compresie de tip adaptiv, unde modelul statistic sufer o permanent mbuntire, n funcie de noiledatecititedepefluxuldeintrare. ncazulutilizriialfabetuluistaticdeordin0,arboreleHuffmanesteconstruitnmodidentic,attnfaza de compresie, ct i n cea de decompresie, pe baza setului de contoare asociate simbolilor din alfabet. Alfabetul i contoarele trebuie transmise alturi de setul comprimat de date, pentru ca decriptarea s fie exact. O prim idee de a construi arborele binar n manier adaptiv este urmtoarea: odat cu fiecare simbol citit/decriptat se reconstruiete complet arborele. Aceast manier de construcie este, ns, extrem de ineficient, deoarece efortul de construcie de la pasul anterior se pierde integral. Ca urmare, algoritmul adaptiv astfel proiectat este cronofag, ceea ce face inoportun utilizarea sa ntro aplicaie de timp real. Rezult c strategia de construcie trebuie s se bazeze pe conceptul de reactualizare. Aceasta presupune CD#42/17

conservarea unei ct mai mari pri din efortul de construcie a arborelui binar, efort efectuat n cursul citirilor/decriptrilor anterioare. Mai precis, este de dorit ca arborele existent nainte de citirea/decriptarea simboluluicurentsfiemodificatulterior,nfunciedeinformaianouadusdeacestsimbol.Astfel: dac simbolul respectiv apare pentru prima dat, atunci arborelui i se va aduga un nou nod n zona inferioar(opusrdcinii);unfiualacestuinodesteocupatdenoulsimbol; dacsimbolulexistdejanarbore,atuncinodulocupatdeeltrebuiereactualizatprin: cretereacuounitateacontoruluisimbolului(aponderiinoduluiocupatdeacesta); rearanjarea ramurilor arborelui n funcie de noua structur de contoare, prin schimbri reciproce de locurintrenoduri. n cazul adaptiv, deoarece nu se pot cunoate dinainte dimensiunile setului de date i ale alfabetului corespondent, nu se mai poate adopta aceeai manier de construcie. Totui, se poate pstra ideea care st la baza relaiei de ordine dintre noduri, pentru a o redefini, cu scopul utilizrii ei n cazul construciei adaptive aarborelui.Aceastnourelaiedeordineestesintetizatdeproprietateadefraternitate. Prindefiniie,unarborebinarcunoduriponderateposedproprietateadefraternitatedac: fiiiaceluiainodprinte(numitei(noduri)frai)suntindexaiconsecutiv; pondereafiecruinoddescretesaurmneconstantodatcucretereaindexuluiasociat; cnd dou noduri ocup acelai nivel ierarhic, fiii nodului de indice mai mic au indici inferiori indicilor fiilorceluilaltnod.

Totprindefiniie,unarborebinarcunoduriponderateavndproprietile: fraternitate; pondereaunuinodprinteesteegalcusumaponderilorfiilorsidireci; se numete arbore Huffman. Prin Metoda Huffman de tip adaptiv, este construit i reactualizat un arbore Huffman asociat setului de date procesat. Fiecare nod al unui arbore Huffman este caracterizat de CD#43/17

3parametri: ponderea asociat, poziia sa n cadrul arboreluii tipul su. La reprezentarea n memorie a unui astfel de arbore, aceti parametri trebuie luai n considerare, construcia, reactualizarea i parcurgerea arboreluidepinzndnmodesenialdeei.

IniializareaarboreluiHuffman
Necunoaterea a priori a dimensiunilor setului de date i alfabetului de ordin 0 asociat impune adugarea la alfabet a 2 simboli virtuali, diferii de oricare dintre simbolii ce ar putea aprea n setul de date. Primul dintre ei se numete simbol de sfriti este notat prin EOS (end of string). Rolul su este de a marca sfritul setului de date (n varianta original sau comprimat). (Acest simbol poate fi utilizat i n varianta neadaptiv a algoritmului.) Simbolul EOS este reprezentat iniial pe doi octei, avnd adesea valoarea 256=0x100.AldoileasimbolvirtualsenumetesimboldeevitareiestenotatprinESC(escape).Rolulsueste extremdeimportantattnfazadeiniializareaarborelui,ctinceadereactualizare,ncazulncareunnou simbol (care nu a mai aprut pe fluxul de intrare) este citit/decriptat. Mai precis, ESC va reprezenta fratele noului simbol, adic fiul pereche al nodului printe ce trebuie creat cu ocazia apariiei noului simbol, ca n Figura3.1.
Nod parinte nou

Simbol nou

ESC

Figura4.1.AdugareaunuinousimbolnarboreleHuffmandinamic. Codulsuoriginal(iniial)estereprezentattotpe2octei,avndvaloareauzualde257=0x101.ncursul compresiei, cei 2 simboli virtuali primesc coduri diferite de cele originale, n funcie de poziia lor n arbore. Simboluldeevitare(ESC)poateapreademaimulteoriniruldedateutilecomprimate(oridecteoricodul care i urmeaz are 8biii descrie un nou simbol original, diferit de toi cei anteriori), n timp ce simbolul de CD#44/17

sfrit (EOS) apare o singur dat (pe ultima poziie airului de coduri, marcnd sfritul acestuia). Datorit acestui fapt, lor li se atribuie cte un contor fix, nemodificabil n cursul compresiei sau al decompresiei, de valoareegalcu1. n aceste condiii, arborele iniial (de la care se ncepe construcia) are doar 3 noduri: rdcinai dou frunze ocupate de simbolii virtuali EOSi ESC (ca n Figura 4.2). Alfabetul iniial conine de asemenea doar cei doisimbolivirtuali.
A 0,2 = ={ }.} A {EOS EOS,,ESC ESC
0,2

t1 (2)

EOS
t2 (1)

ESC
t3 (1)

Figura4.2.ArboreleHuffmandinamiciniial. Arborele iniial posed proprietatea de fraternitate, fiind un arbore Huffman unic determinat. Mai mult, aa cum vom vedea, ultimul nod (de indice maxim) va fi ntotdeauna ocupat de simbolul de evitare ESC. Noul cod al simbolului de evitare este 1, n aceast faz iniial. Ordinea celor 2 simboli virtuali este extrem de important aici, dei ea nu corespunde ntru totul intuiiei (paradoxal, nu simbolul de sfrit este ultimul din arbore, ci simbolul de evitare). Dac ei ar figura n ordine invers, atunci, prin reactualizare, indicele atribuit simbolului de sfrit va fi mereu modificat, operaie evitat n cazul ordinii precizate. De altfel, n Figura 4.2 esterespectatordinealexicograficpeacelainivelierarhic,aacumimpunedefiniiaarboreluiHuffman. CD#45/17

ReactualizareaarboreluiHuffmannetapadecompresie
Etapa de reactualizare a arborelui Huffman n faza de compresie este cea mai dificil i complex. Aceastadeoarece,chiardacesteconservatefortuldeconstruciedelapasulanterior,ceidoiarboriHuffman succesivi construii recursiv pot avea structuri extrem de diferite prin informaia transportat de simbolul curentcitit/decriptat.ProceduradereactualizareestedescrisdeAlgoritmul4.1. Algoritmul4.1.ReactualizareaarboreluiHuffmanpentrucompresie. 1. Dac noul simbol nu se regsete n alfabetul curent (reprezentat de frunzele arborelui), atunci el trebuieadugatalfabetuluidupstrategiacareurmeaz: a) Nodul frunz ocupat de simbolul de evitare devine nod intermediar, t2 N 1 , iar ponderea sa devine egalcu2. b) Noulnodintermediar, t2 N 1 ,devinenodprintepentrudounodurifii: t2 N (ocupatdesimbolul s ), cu ponderea N ( t2 N ) (cci s apare pentru prima dat)i t2 N +1 (ocupat de simbolul ESC), cu aceeai pondere( N ( t2 N +1 ) = N ( t2 N ) ). c) Deoarece ponderea nodului t2 N 1 sa modificat, este posibil ca proprietatea de fraternitate a arborelui s se fi pierdut. De aceea, ea trebuie refcut att prin mutri de subarbori cti prin reactualizri ale tuturor contoarelor nodurilor noului arbore. Figura urmtoare ilustreaz mai clar modificarealocaladusdesimbolul s nacestcaz:
t2 N 1 (2)
0

s
t2 N (1)

ESC
t2 N +1 (1)

CD#46/17

2. Dacnoulsimbolexistdejanalfabetulcurent,atunciseapeleazlaprocedurademaijos: a) Contorulsimbolului s trebuieincrementatcuounitate.Dacnodulfrunzocupatde s este tn (cu n 2,2 N 2 ),atuncinoulcontorasociatvafiegalcu N ( tn ) + 1 . b) Schimbareaponderiinodului tn poateconducelapierdereaproprietiidefraternitateaarborelui. 3. Refacerea proprietii de fraternitatei reactualizarea ponderilor ntregului arbore binar. n arborele binar se afl un nod critic tn (cu n 2,2 N 2 ), a crui pondere a crescut cu o unitate. Pentru refacerea proprietii de fraternitate, trebuie gsit noul loc pe care l va ocupa nodul critic tn mpreun cu toi descendenii si (dac exist)i s se incrementeze cu o unitate ponderea noului su printe. Acesta va deveni, la rndul sau, noul nod critic i astfel se va relua procedura pn cnd se va ajunge la rdcin. Reindexarea nodului critic tn i a altor noduri n scopul rectigrii fraternitii se realizeaz astfel: a) Plecnddelaindicele n ,secaut,nordineadescresctoareaindicilor,primulnodcuponderecel puinegalvalorii N ( tn ) + 1 .Fieacestanodul tm . b) Dac m = n 1 , nu mai este necesar mutarea lui tn i a descendeilor si, ci se incrementeaz pondereaprinteluilui tn ,caredevinelarndulsunodcriticialgoritmulsereiadelapasul3. c) Dac m < n 1 , ntre cele dou noduri exist cel puin un nod cu pondere strict inferioar ponderii nodului critic. Pentru refacerea proprietii de fraternitate este necesar interschimbarea pozitiilornodurilor tm+1 si tn ,mpreuncusubarboriilor.Astfel: dac m = n 2 ,ntre tm i tn existunsingurnod, tn1 ; dac m < n 2 , ntre tm i tn exist cel puin dou noduri intermediare ( tm+1 , tm+2 , ..., tn1 ); n acest caz, interschimbarea poziiilor lui tm+1 i tn se realizeaz astfel (conform figurii care urmeaz): CD#47/17

tm+1

tm + 2

tn

Am+1
" tn "

Am+ 2
tm + 2

An
" tm+1 "

An

Am+1

An1

tn semutmpreuncuarboreleluidescendentnnouapoziie, tm+1 ; arboreledescendentallui tn1 devinenoularboredescendentallui tm+1 ; subarboriinodurilorintermediareischimbprinteledirectcuopoziiesprestnga; nfinal,nodul tm+2 primetearboreledescendentalnodului tm+1 ; dacprintrenodurileintermediaresentlnescfrunze,elevorfisrite; dup interschimbare, ponderea nodului tm+1 se incrementeaz i astfel devine noul nod critic,algoritmulrelundusedelapasul3. Mutarea arborilor descendeni ai nodurilor n cursul reactualizrii nu necesit reindexarea nodurilor componente. Se poate demonstra c aceast proprietate (care simplific foarte mult algoritmul) este corect, eadatornduseproprietiidefraternitate. CD#48/17

Scalareacontoarelorncursulreactualizrii n cazul unor iruri lungi de date destinate compresiei/decriptrii, este posibil ca operaia de incrementareacontoarelorasociatenodurilorarboreluiHuffmansconducladepireanumruluimaximce poate fi reprezentat n memorie. Acest neajuns se poate remedia printro (re)scalare a contoarelor asociate nodurilor.Scalareaconstndouoperaii: 1. mprireala2atuturorcontoarelorasociatefrunzelor(cupstrareaintactacontoarelorunitare). 2. Refacerea integral a structurii arborelui HUFFMAN, n manier static, respectnd proprietatea de fraternitate. mprirea la 2 poate conduce la schimbarea fundamental a formei arborelui, deoarece aceast operaie poatedegradafrecvenarealdeapariieasimbolilorpefluxuldeintrare. S considerm arborele Huffman din stnga Figurii4.3, surprins nainte de scalarea contoarelor sale. Dup scalare, noul arbore nu mai verific proprietatea de fraternitate. De aceea, el trebuie reactualizat. Se poate constata uor c forma final corect (ilustrat n dreapta Figurii4.3) este extrem de diferit de cea a arboreluiiniial,existentnaintearescalrii. Comparnd cei doi arbori Huffman din acest exemplu, se constat c a avut loc o transformare important a lungimilorcodurilorasociatefrunzelor.Astfel,lungimeamaximacodului,de4biipentrusimbolii s4 iESC,a sczut cu o unitate, lungimile de cod ale simbolilor s1 , s2 i EOS sau conservat, iar lungimea de cod a simbolului s3 acrescutcuounitate.

CD#49/17

t1 (18)
0

t 2 (12) 0
1

t3 (6) 0 s3 t6 (3)
1
0

t1 (10)
1

s11 s s s22 t4 (6) t5 (6)

t7 (3)
0

1
EOS

t2 (6) 0
t9 (1)
1

t3 (4) 0 t6 (2) 0 s3 t8 (1)


1 1

t8 (2)
0

1
ESC

s11 s t4 (3)

s s22 t5 (3)

t7 (3) 0
EOS

1
ESC

s4 t10 (1)

t11 (1)

s4 t9 (1)

t10 (1)

t11 (1)

Figura4.3.UnexempludearboreHuffmandinamicnaintede(stnga)idup(dreapta) scalareacontoareloraferente. Aadar, se poate considera c scalarea contoarelor a adus un ctig n materie de compresie (codul cel mai lung are acum doar 3 bii), dei arborele Huffman final este foarte diferit de cel iniial. Totodat, aceste modificri ale lungimilor de cod pun n evideni un mecanism autocompensator de eroare (unele lungimi scad,altelecresc). Aa cum reiesei din exemplul prezentat, scalarea contoarelor este o operaie necesar pentru a evita blocarea algoritmului. Realizarea ei presupune, ns, stabilirea unui criteriu care s defineasc precis momentul cnd trebuie declanat scalarea. Obiectivul urmrit este dublu: prevenirea depirii capacitii de reprezentare a contoarelori evitarea emisiei de coduri a cror lungime depete o valoare dat (chiar dac nuafostdepitcapacitateadereprezentareacontoarelor). CD#410/17

ReactualizareaarboreluiHuffmannetapadedecompresie Spre deosebire de construcia adaptiv a unui cod, decriptarea sa adaptiv este o operaie mult mai simpl, ea presupunnd doar o parcurgere descendent a arborelui. Vom prezenta n continuare algoritmul asociatacesteioperaii. Algoritmul4.2.ReactualizareaarboreluiHuffmanpentrudecompresie. 1. Se citete fluxul de intrare la nivel de bit (n mod normal, se citete cte un octet, n cadrul cruia se analizeaz fiecare bit). n paralel, se construietei se reactualizeaz arborele Huffman ntocmai ca n fazadecompresie.Iniial,arboreleareformadinFigura4.2.Primulsimboldecriptatvafi EOS(cod0), dacfluxuldeintrareestevid,sauEOS(cod1),ncazcontrar.Simboluldeevitarevafiurmatdecodul original(pe8bii)alprimuluisimbolvaliddinsetuldedate. 2. Se decripteaz simbolul curent de pe fluxul de intrare, prin parcurgerea arborelui Huffman existent, ncepnd cu rdcinai terminnd cu una dintre frunzele sale. Parcurgerea arborelui este ghidat de succesiuneabiilorfluxuluideintrare: a) Dac simbolul decriptat este EOS, atunci se citete urmtorul octet de pe fluxul de intrare. Acesta vaficoduloriginalalsimboluluicurent. b) DacsimboluldecriptatestediferitdeEOS,atuncisimbolulamaiaprutpefluxuldeintrare,frunza ocupatdeelnarboreleHuffmanoferindcoduloriginal(pe8bii)alacestuia. n ambele situaii, codul original al simbolului trebuie nscris pe fluxul de ieire. Dac ultimul simbol decriptatesteEOS,algoritmulsencheie.ncazcontrar,setrecelapasulurmtor. 3. Se reactualizeaz arborele HUFFMAN utiliznd Algoritmul 4.1 nemodificat, deoarece, n aceast faz, numaiestenecesarotabeldecoduri.Algoritmulsereiadelapasul2. CD#411/17

Exemplul care urmeaz are rolul de a pune n eviden cteva aspecte importante pentru algoritmul de generareimanevrareacodurilor(maialesnfazadecompresie).naintedealprezenta,suntnecesaredou remarci: ori de cte ori simbolul citit nu se regsete printre frunzele arborelui binar, sunt emise dou coduri succesive: primul este cel al simbolului de evitare ESC (cod preluat din arborele Huffman nainte de reactualizare),iaraldoileaestecoduloriginalpe8bii(nemodificat)alsimbolului; odat cu mutarea unui nod n alt poziie (n cursul reactualizrii arborelui), este posibil ca unul sau maimuliarboridescendenisfie,larndullor,mutainaltepoziii. Reactualizarea codurilor frunzelor const n reactualizarea prii mai semnificative a vechiului cod, deoarece parteamaipuinsemnificativnuesteafectatdemutare. Exemplu Seconsidersetuldedateformatdin4simboli,primii3fiinddiferii:
D :ADIA

SedoretecompresiaadaptivdetipHuffmanaacestuia,urmatdedecompresiaadaptiv. Pentrucompresie,sepleacdelaarboreleHuffmaniniialdinFigura4.2,redatmaijospentruuurin.
t1 (2) 0
1

EOS
t2 (1)

ESC
t3 (1)

CD#412/17

Evoluiaulterioaraacestuiaesteredatncontinuare.

Se citete simbolul 'A' i se emit dou coduri (care nsumeaz 9 bii): 1 (ESC) i 01000001 (A). Arborele aferentdevine:
t1 (3)
0

t2 (2)

EOS
1

t3 (1)

ESC

t4 (1) t5 (1)

Se citete simbolul 'D'i se emit dou coduri (care nsumeaz 10bii): 01 (ESC))i 01000100 (D). Aceasta conducelamodificareaarboreluicamaijos:
t1 (4)
0

1
t3 (2)

t 2 (2)

A
t 4 (1)

EOS
t5 (1)

D
t6 (1)

ESC
t7 (1)

Secitetesimbolul'I'iseemitdoucoduri(carensumeaztot10bii):11(ESC))i01001001(I).Arborele seextindectrenivelulurmtor: CD#413/17

t1 (5)
0

1
t3 (2)

t 2 (3)

t4 (2) EOS t5 (1) 1 0


I

t6 (1) t7 (1)

ESC
t9 (1)

t8 (1)

n fine, se citete simbolul 'A'i se emite codul (de numai 2 bii): 11. Acesta nlocuiete codul original pe 8 biialsimbolului'A'.ArboreleHuffmnanfinalaratastfel:
t1 (6)
0

1
t3 (2)

t2 (4)

0
t4 (2)

A
t5 (2)

EOS

0
I

t6 (1) t7 (1)

ESC
t9 (1)

t8 (1)

CD#414/17

irul original de simboli este reprezentat pe cel puin 41 de bii (32 de bii ai caracterelor, plus cel puin 9 bii care indic sfritul mesajului). Fluxul de date comprimate, care va fi utilizat n procedura de decompresieesteconstituitdinurmtoarelecoduri,numrnd33debii: 101000001010100010011010010011111 Dei setul de date este extrem de scurt, Algoritmul Huffman dinamic reuete s realizeze compresia (pe seama faptului c unul dintre simboli se repet). Aceast caracteristic este general (cu condiia s existe repetiiidesimboli)isitueazalgoritmulnrndulcelormaieficientereetedecompresieadatelor. Pentruarealizadecompresia(decriptarea)iruluidebiidemaisus,seprocedeazastfel: Se citete bitul de valoare 1i se decripteaz simbolul ESC, folosind arborele Huffman iniial. Codul su original nu este emis, ns, pe fluxul de ieire. Operaia care se execut n continuare este citirea urmtoruluioctetdepefluxuldeintrare:01000001(litera'A'),careestenscrisnemodificatpefluxulde ieire. SereactualizeazarboreleHuffmanisereseteazparcurgereasadinrdcin. Secitescbiiisuccesividevalori01(conformnouluiarbore)iseconstatcsimboluldecriptatestetot ESC. n consecin, urmtorul octet al fluxului de intrare, 01000100 (litera 'D'), este nscris nemodificat pefluxuldeieire. Urmeazonoureactualizareaarborelui. Cum urmtorii 2 bii citii, 11, conduc tot la simbolul de evitare, urmtorul octet citit, 01001001 (litera 'I')esteieldescrcatdirectpefluxuldeieire. Sereactualizeazarborele,carevaaveaacum5frunze.

CD#415/17

Se reia citirea fluxului de intrare. Dup codul 11, se constat c, folosind arborele Huffman curent, sa ajuns la nodul frunz ocupat de litera 'A'. Codul original al acesteia (01000001) este preluat din informaiadenodaarboreluiidescrcatpefluxuldeieire. Onoureactualizareaarboreluibinarnuaducenoifrunzeacestuia,cioorganizarediferit. Ultimii 2 bii citii, aceiai 11, conduc la decriptarea simbolului EOS, care arat c decompresia a luat sfritiprovoacnchidereafluxuluideieire. Din acest exemplu, se observ clar cum un acelai cod (11) poate avea semnificaii total diferite la momente de timp diferite (ESC, apoi 'A'i, n fine, EOS). Cu toate acestea, decriptarea este exact, deoarece structuraarboreluiHuffmanesteprecis,unicdeterminatdefiecaresimboldecriptatiidenticnetapelede compresiedecompresie.

C.Sarcinidelucru
Tema1(ImplementareaalgoritmilorHuffmandinamici) a. Scriei rutinele corespunztoare Algoritmilor 4.1, 4.2 i metodelor de compresiedecompresie din MetodaHuffmanstatic. b. Verificai corectitudinea lor cu ajutorul unui program de test aplicat exemplului din seciunile precedente,adicsetuluidedate:
D :IT0IS0BETTER0LATER0THAN0NEVER.

(textultrebuiesfiereconstituitperfect). c. Evaluai factorul de compresie realizat n acest exemplu (innd conti de informaia auxiliar). Este capabilmetodasrealizezecompresia? CD#416/17

Tema2(TestareaalgoritmilorHuffmandinamici) a. Scriei un program care realizeaz compresia i decompresia celor 12 fiiere din corpusul de date descrisnLucrarea1,cuajutorulrutinelordelatemaprecedent. b. Calculai norma diferenei dintre setul iniial de datei cel decomprimat. Pentru fiecare set de date, indicai factorul de compresie aferent (incluznd informaia auxiliar) i evaluai duratele de compresie, respectiv decompresie. Comentai rezultatul obinut, cu referire la capacitatea de compresieametodeipentrudiferitetipuridefiiere. c. Comparai factorii de compresie de la punctul precedent cu cei obinui prin utilizarea Metodelor ShannonFano, Huffman static i a celor dou programe de uz general WinZIP i WinRAR. (Utilizai funciafreadpentruaevaluaexactnumruldebiiaiarhivelorprodusedeacesteutilitare.)Comentai rezultatele obinute, cu referire la compromisul dintre complexitatea algoritmilor de compresie i performaneleacestora.

CD#417/17