Sunteți pe pagina 1din 13

LaboratorPS Algoritmidecompresieadatelor

Lucrarea1:IntroducerenCompresiaDatelor Lucrarea2:AlgoritmulShannonFano Lucrarea3:AlgoritmulHuffmanstatic Lucrarea4:AlgoritmulHuffmandinamic


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

A.Obiective
Introducerea principalelor concepte din domeniul Compresiei Datelor. nsuirea unui un mic vocabular determenispecifici,carevafifolositinlucrrileurmtoare.

B. Semnaleutilizate
Pentruatestaalgoritmiidinacestcapitol,suntdisponibiletreicategoriidefiierededate: Documente.Dinaceastcategoriefacpartefiierele: Documentatie_UMAPID.doc; Documentatie_UMAPID.pdf; Prefata_Undine.txt; show_audio.m(sursMATLAB); Y04.m(seriededatenformatASCII). AcesteapotfiextrasedinarhivaDocuments.rar. Semnaleaudioreale.ArhivaAudio.rarinclude3semnalenregistratenformatulwave: instr_01.wavsunetemisdeuninstrumentmuzical; sound_01.wavsunetfabricatartificial; speech_01.wavsemnalvocal(emisdevoceauman). Executabile.FiiereledinaceastcategoriesuntinclusenarhivaExecutables.rariconincodexecutabil saudatempachetatenformatulmatdinMATLAB.Elesunturmtoarele: KARMA_DATA482#1_5_V7.mat; quartz.dll; WinRar.exe; WINZIP32.EXE. CD#12/13

C. Suportteoretic
CompresiaDatelor(CoDa),esteundomeniudecercetarecarefacepartedincmpulTeorieiInformaiei ramur a Matematicii nscut ctre sfritul anilor 40, odat cu lucrrile publicate de ctre cercettorul americanC.E.Shannon(delaBellLaboratories)imatematicianulungurD.Gabor(unuldintrepionieriiTeoriei Comunicaiei,laureatalpremiuluiNobel).Acestelucrriprezintoseriedesoluii(maimultdeordinteoretic) aleunorproblemelegatedeemisia,culegerea,prelucrarea,transmisia,recepiaiinterpretareainformaieicu ajutorul unui mijloc automat de calcul. n aceast lucrare, sunt prezentate principalele concepte care definesc domeniulCoDa,fraintrandetaliidenaturteoretic. Conceptedebaz Obiectul de studiu al CoDa l constituie metodelei tehnicile destinate reducerii volumului unui set de date reprezentate sub form binar, cu posibilitatea reconstituirii acestuia fie exact, fie aproximativ (conform unor criterii definite a priori). Posibilitatea de a reduce volumul unui set de date se bazeaz pe cteva fenomeneimportantelegatedereprezentareabinarainformaiei. Astfel, setul de date este privit ca un ir finit de simboli. Acesta este un termen consacrat (nu foarte diferit de termenul colocvial de simboluri). Fiecare dintre simboli are o reprezentare numeric unic numit cod(numeric)original.Numrulsimbolilorcecompununsetdedate,adicvolumulacestuia,este,ngeneral, mult mai mare dect numrul de simboli distinci ce particip la construcia sa. De regul, un simbol este reprezentat n baza 2, pe 8 bii (1 octet), astfel c setul de date se construiete folosind maximum 28 = 256 simbolidistinci.Mulimeasimbolilordistincidintrunsetdedatese numetealfabet,denumiresugeratde conceptul uzual de alfabet literar, din vorbirea colocvial. Alfabetul din CoDa include literele curente (A, B, C etc.), dar nu se reduce doar la acestea; el poate coninei ali simboli (cifre numerice, semne de punctuaie, semne speciale care nu au o interpretare direct etc.). Reprezentarea simbolilor pe 8 bii este realizat CD#13/13

conform unui standard internaional numit ASCII. Tabela ASCII pune n coresponden biunivoc mulimea celor 256 de simboli cu mulimea celor 256 de coduri numerice (de la 0 la 255). De exemplu, codul (numeric) original asociat literei 'A' este 65, n baz zecimal. Acest cod poate fi exprimat prin 0x41 n baza 16 (prin convenie,numereleprecedatede0xsuntreprezentatenbaza16sauncodhexazecimal)sauprin01000001 nbaza2sauncodbinar. Un al doilea fenomen important al reprezentrii binare a informaiilor este cel al frecvenei diferite de apariie a simbolilor alfabetului dea lungul setului de date. Nu toi simbolii particip n mod uniform la construcia setului de date: unii sunt mai frecveni dect alii. Acest fapt a sugerat ideea c alfabetul ar putea fi recodificat cu ajutorul unor coduri de lungime variabil, n aa fel nct simbolilor ce apar frecvent s li se alocecodurimaiscurtedectsimbolilorceaparmairarnsetuldedate. Ratdecompresie,factordecompresie Un prim parametru care privete performanele metodei de compresie utilizate este rata de compresie. Aceastasenoteazcu iareurmtoareaexprimare:
# dc = 1 100 [%] , # do

(1.1)

unde: # dc estelungimeasetuluidedatecomprimat,iar # do estelungimeasetuluidedateoriginal. Aceastdefiniiearatc: dac = 100 % , atunci metoda de compresie aferent este ideal, ctigul obinut prin compresie fiind maxim;npractic,ns, < 100 % ; CD#14/13

dac = 0 % , atunci metoda nu realizeaz nici o compresie efectiv, ctigul fiind nul; n practic, se spune, n acest caz, c setul de date a fost povestit (stored),adic redatca atare,fr a suferi ocompresie efectiv; dac < 0 % ,atuncimetodaaferentnurealizeazocompresieefectiv,cioexpandareadatelor(adic oreprezentareaacestoracumaimulibiidectoriginalul),fiindineficient.
Termenulderatdecompresieesteadeseanlocuitdeceldefactordecompresie,notatcu .Acestase definetecaraportulprocentualdintrelungimeasetuluidedatecomprimaticeaasetuluidedateoriginal:

# dc (1.2) 100 [%] . # do Interpretarea sa este considerat mai direct dect cea a ratei de compresie. O metod de compresie estecuattmaieficientcuctfactoruldecompresieestemaimic.

= 1 =

Entropie,cantitatedeinformaie,redundan Un concept care leag CoDa de Teoria Informaiei este cel de redundan. nainte de al defini, trebuie subliniat faptul c obiectivul principal al unei metode de compresie a datelor este detectarea, localizarea i eliminarearedundanelor(adicarepetabilitiiinformaiilor)dinsetuldedate. O msur a redundanei unui set de date nu este dat de rata de compresie (aa cum am fi tentai s credem), deoarece rate diferite de compresie se pot obine pentru acelai set de date, dac se apeleaz la metode de compresie diferite. Redundana este o constant a setului de date i nu depinde de metoda de compresieutilizat.

CD#15/13

Volumul unui set de date este numrul simbolilor (nu neaprat distinci) care l compun. Lungimea unui setdedateestenumrultotaldebiipecareesteelreprezentat.Celedounoiunisuntdiferite. Vom nota prin ( s ) frecvena de apariie a simbolului s . Ea constituie o estimaie a probabilitii de apariie a simbolului s , notat cu Q ( s ) . Plecnd de la ( s ) , se poate calcula numrul minim de bii suficient pentru a recodifica simbolul s , fr a confuzie cu ali simboli. Acest numr se numete entropie i poate fi fracionar (nu neaprat ntreg). Practic, ns, el va fi adesea rotunjit la ntregul superior, din motive lesne de neles.Entropiavaficelmultegalcunumruldebiiaicoduluioriginal(deexemplu,8).Diferenadintreele constituie o msur a redundanei intrinseci transportate de acel simbol n cadrul setului de date (adic numruldebiiinutiliprezenincoduloriginal). Entropia unui simbol s dintrun set de date (adic entropia informatic) se noteaz prin I ( s ) i se
I ( s ) = log 2 ( s ) .

defineteastfel: (1.3)

ndefiniia(1.3)seobservimediatc: ( s ) (0,1] ,ceeacearatc I ( s ) > 0 .nconsecin:

( s) = 2 I ( s ) [0,1] .

(1.4)

Dac,deexemplu,litera'a'aparede38deorintruntextcuvolumulde100decaractere,atunci ('a') = 0.38 , ceea ce conduce la entropia informatic I ('a') = log 2 0.38 1.4 bii. Rezult c, n codarea iniial a lui 'a', 6.6 bii (din cei 8 alocai) sunt inutili, adic redundani. Practic, va fi suficient ca literei 'a' s i se aloce doar 2bii,pentruaobineoprimcompresieatextului.

CD#16/13

Unaltconceptdirectlegatdefrecvenadeapariieaunuisimbol s estecantitateadeinformaie,notat cu i ( s ) .Eaesteinversproporionalcufrecvena ( s ) :

i (s) =

C , ( s )

(1.5)

unde C > 0 esteoconstantdeproporionalitate. Un simbol ce apare frecvent n setul de date transport o cantitate de informaie mic i va primi un numr mic de bii de recodificare. Acest fenomen este mai bine ilustrat de urmtoarea relaie evident (obinutprincombinareadefiniiilor(1.3)i(1.5)):
I ( s ) = log 2 C + log 2 i ( s ) ,

(1.6)

ncaresepoaterenunalatermenulconstant log 2 C . Se noteaz, mai departe, prin D setul de date asupra cruia se opereaz (mulimea tuturor simbolilor (nu neaprat distinci) ce alctuiesc setul de date). Reamintim c alfabetul setului de date este mulimea tuturorsimbolilordistincicealctuiescsetuldedatei,ngeneral,diferdemulimea D .Redundanasetului dedate D semsoarprinnumrultotaldebiiutilizai,darinutili,calculatastfel:

S (D ) = [8 I( s ) ] .
sD

(1.7)

(Am considerat c fiecrui simbol i sa alocat iniial un cod pe 8 bii.) Redundana depinde direct de entropiile tuturor simbolilor mesajului. Ea este cu att mai pronunat cu ct aceste entropii sunt mai mici. Dacinem cont dedefiniia (1.3) a entropiei,atunci redundana (1.7) se poate exprimai astfel (n funcie de frecvenele deapariie): CD#17/13

S (D ) = [8 log 2 ( s) ] .
sD

(1.8)

Astfel, frecvene mari de apariie ale simbolilor setului de date conduc la o redundan important a acestuia. Relaia (1.8) poate fi utilizati pentru evaluarea redundanei unor subseturi de date din setul original. De exemplu, irul de 5 caractere 'aaaaa' (numit ad hoc cuvnt) este reprezentat iniial pe un numr de 5 8=40 de bii. Dac el face parte dintrun set de date mai larg, n care ('a') = 1/16 , atunci:
I ('a') = log 2 1/16 4 i S ('aaaaa') = 40 5 4 = 20 bii. Rezult c, n cuvntul 'aaaaa', doar 20 de bii de

reprezentare sunt utili, adic 50%. Mai mult, acest cuvnt ar putea fi codificat n mod ideal cu numai 7 bii (n loc de 20), reprezentnd codul literei 'a' (pe 4 bii) i numrul de apariii consecutive (5, numr care ocup 3bii: 101). Cu toate acestea, o reprezentare pe un numr total de bii sczut este dificil de realizat, cci, n procesuldedecompresie,oseriedeinformaiiauxiliaretrebuiedeasemeneasseregseascnsetuldedate comprimat. De exemplu, este necesar s se cunoasc numrul de bii alocai simbolului 'a', poziia cuvntului 'aaaaa' n setul de date etc. Ori, aceast informaie poate anula ctigul obinut prin calculul entropiei i redundanei. CD#18/13

D.GhidC++
n continuare, sunt prezentate cteva funcii standard ce pot fi folosite n conceperea programelor C++. PentruprogrameleMATLAB,funciilesuntsimilareipotfiinterogatecuajutorulfacilitilorHelp,Doc,etc. Pentruadeschideunfiier,sepoateutilizaapelul:
FILE * fopen ( const char * filename, const char * mode );

unde: ieirea funciei este pointerul ctre o variabil de tip FILE, filename este numele complet al fiierului, scris sub forma unuiir de caractere, iar mode este modul de deschidere (unul sau mai multe caractere). Un fiierpoatefideschisnmaimultemoduri,darcelemaifrecventesunt: r = modulcitire(read);nusepoatenscrienimicnfiieruldeschis; w = modul scriere (write); nu se poate citi nimic din fiierul deschis; scrierea se face peste datele deja existente n fiier (dac exist), de la prima poziie a acestuia; modul scriere permite deschiderea unnoufiier,carenuamaifostcreat; a = moduladugare(append);dacfiierulnuexist,elvaficreatideschisnmodulscriere;altfel,el vafideschisastfelnctladateledejaexistentessepoatadugaaltelenoi; r+ = modul citirescriere; pentru acest mod, fiierul trebuie s fi fost creat anterior, altfel el nu poate fi creat;odatdeschis,fiierulpoateficititi/sausupranscris(adicinformaianouosupranscrie peceaveche); a+= modul citireadugare; dac fiierul nu a fost creat anterior, el va fi creat acumi deschis; odat deschis,fiierulpoateficititi/sauextins(adicinformaianouseadauglaceaveche). Dac funcia returneaz pointerul NULL , utilizatorul este informat c fiierul nu a putut fi deschis, din diferite cauze (cel mai frecvent, pentru c nu a putut fi gsit pe disc n vreuna dintre locaiile de cutare). Pentru utilizarea acestei funcii, precum i a celorlalte prezentate mai jos, este nevoie de introducerea bilbioteciiasociateantetuluistdio.h(standardinputoutputfunctions). CD#19/13

Utilizatorul poate accesa informaia dintrun fiier deschis n diferite moduri. Exist un pointer virtual care indic locaia din fiier ce poate fi citit sau nscris. Dupa citirea/scrierea fiecrei date, pointerul se incrementeazautomat.Utilizatorulpoatetotuirepoziionaacestpointerastfel: int fseek ( FILE * stream, long int offset, int origin ); unde:

streamesteindicatoruldefiier,aacumafostelreturnatdectrefunciafopen; offset este un ntreg care arat c pointerul trebuie deplasat cu valoarea absolut a acestuia ctre sfritul fiierului (dac e strict pozitiv), ctre nceputul fiierului (dac e strict negativ) sau deloc (dac estenul); origin este o etichet de tip ir de caractere, care poate avea una dintre urmtoarele forme: SEEK_SET, SEEK_CUR sau SEEK_END; ea arat de unde trebuie s plece pointerul: SEEK_SET de la nceputul fiierului, SEEK_CUR de la poziia curent n fiier, respectiv SEEK_END de la sfritul fiierului. Funcia fseek returneaz un indicator de stare, care arat dac repoziionarea sa efectuat cu succes (0)saunu(ovaloarediferitde0). Dacpoziiaindicatdepointerulvirtualnu(mai)estecunoscut,eapoatefi(re)gsitastfel:

long int ftell ( FILE * stream );

Argumentul de ieire este un ntregcare msoar poziia n octei, ncepnd cu numrul 0 (nceputul de fiier). Dacexistoeroare,estereturnatvaloarea-1L,iarvariabilaglobalerrnoestesetatcuovaloarepozitiv. Aceastvaloarepoatefiinterpretatdefunciaperror. Citirea de date dintrun fiier deschis se poate realiza, n general, cu ajutorul funciei fread. Declaraia uzualaacesteiaesteurmtoarea:

CD#110/13

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); unde: ptresteunpointerctreunblocdememoriecudimensiuneaminimde(size*count)octei; sizeestedimensiuneanocteiafiecruielementdecitit; countesteunntregcarearatctedatededimensiunesizetrebuiecitite; streamesteindicatoruldefiier(returnatdectrefunciafopen). Biblioteca asociat antetului stdio.h conine o colecie de funcii importante ce pot fi folosite n realizareaunuiprogramC++.Listacompletdefunciiesteprezentatmaijos.Pentrumaimulteinformaiicu privirelautilizarealorsepoateaccesapaginaweb: http://www.cplusplus.com/reference/clibrary/cstdio/ clearerr fscanf rename fclose fseek rewind feof fsetpos scanf ferror ftell setbuf fflush fwrite setvbuf fgetc getc sprintf fgetpos getchar sscanf fgets gets tmpfile fopen perror tmpnam fprintf printf ungetc fputc putc vfprintf fputs putchar vprintf fread puts vsprintf freopen remove CD#111/13

E.Sarcinidelucru
Tema1(Operareacufiiere,evaluareadimensiuniiacestora) Scriei un program prin care s determinai dimensiunea n octei i n perechi de octei pentru fiecare fiier din corpusul celor 12 descris n subseciuneade semnale utilizat. Comparai dimensiunea n octei obinutcuceaafiatdeexploratoruldefiiere(WindowsExplorer,NortonCommander,etc.).Completai apoi programul cu un set de instruciuni care s msoare numrul de bii ai fiecrui fiier. Se potrivete raportuldintreacestnumricifra8cuceldeoctei?Argumentairigurosrspunsul. Tema2(Histograme) Scrieiunprogramprincarescitiidateledinfiecarefiieralcorpusuluisubformdesimbolireprezentai ntipe8bii,apoipe16bii.Dupcitire,evaluaiiafiaiceledouhistogramealedatelorfiecruifiier. (Histograma se calculeaz prin detectarea numrului de apariii ale unui simbol. Dac simbolul este reprezentat pe 8 bii, atunci alfabetul conine cel mult 256 de simboli distinci. Lungimea setului de date fiind, de regul, mai mare, este clar c unii dintre ei (dac nu toi) sunt obligai s se repete. Un fenomen similararelocincazulsimbolilorreprezentaipe16bii,numaic,aici,frecvenadeapariieasimbolilor este mai mic.) Observai cu atenie aceste 24 de histogramei indicai 3 dintre ele care par apropiate de distribuiagaussian.Carecredeicesteexplicaiapentruacesttipdedistribuie?Existvreohistogram care sugereaz c datele sunt distribuite uniform? Dac da, pentru care seturi de date? De ce credei c acesteasuntdistribuitecavsiuniform?Argumentairspunsurilenmanierriguroas. CD#112/13

Tema3(Entropii,redundane) Utiliznd programul de la tema anterioar, scriei un nou program care evalueaz i traseaz grafic entropiile informatice ale simbolilor fiecrui set de date. Pe fiecare pereche de grafice (simboli de 8 biii simbolide16bii),indicai redundanasetuluicorespunztordedate.Efectuaiocomparaientrecele24 de seturi de date privind redundana. Enumerai seturile de date n ordinea descresctoare a compresibilitii.(Teoretic,celemaicompresibilesunticelemairedundante.)

CD#113/13

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