l06_tci_algoritmi de compresie folositi in sistemele moderne de arhivare_codarea huffman

Upload: ionescu-viorel

Post on 03-Apr-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/29/2019 L06_TCI_Algoritmi de Compresie Folositi in Sistemele Moderne de Arhivare_Codarea Huffman

    1/6

    37

    ALGORITMI DE COMPRESIE FOLOSII N SISTEMELEMODERNE 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 desimulare pe calculator care ilustreaz modul de compresie.

    2. Noiuni teoretice

    2.1. Noiuni generale despre compresieCompresia 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 calitiisunetului, 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 negndim la prescurtrile din viaa de zi cu zi (abrevieri: prof., etc., CEC, .a.) acestea apar ca oform primitiv a compresiei de date. Compresia de date fr pierdere, prezent n programele dearhivare, n sistemele de transmisiune a datelor, a evoluat de-a lungul timpului pornind de laalgoritmi simpli (suprimarea zerourilor, codarea pe iruri) i ajungnd la algoritmii complecifolosii 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 timpuluieste 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 rezultatulpoate fi dezastruos. De aici este uor de neles c noile direcii n studiul compresiei urmrescobinerea unui algoritm care s ofere o compresie ct mai bun pentru tipuri de surse ct maidiferite.

  • 7/29/2019 L06_TCI_Algoritmi de Compresie Folositi in Sistemele Moderne de Arhivare_Codarea Huffman

    2/6

    38

    Aprecierea cantitativ a compresiei realizate se face utiliznd factorul de compresie

    definit ca: uc

    c

    nF

    n= , unde

    un este lungimea n bii a mesajului iniial i

    cn lungimea dup

    compresie, precum i prin eficiena codrii definit prin2

    ( )

    log

    H S

    n m =

    , unde H(S) reprezint

    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 simbolurilormesajului, statistic ce se obine printr-o parcurgere iniial a ntregului mesaj. Aceti algoritmiofer 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 larecepie, 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 altalgoritm 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 1 1 Mr s s= avnd

    1 1( ) ( ) ( )M Mp r p s p s= + 3. Includerea mesajului r1 n mulimea celorlalte mesaje, n ordinea descresctoare aprobabilitilor, alctuind irul ordonat R1.4. Repetarea algoritmului de restrngere pn cnd ultimul ir ordonat Rk conine doar doumesaje.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:

    05.010.015.015.025.03.0

    : 654321ssssss

    S

    b) S se determine eficiena codrii i factorul de compresie.

  • 7/29/2019 L06_TCI_Algoritmi de Compresie Folositi in Sistemele Moderne de Arhivare_Codarea Huffman

    3/6

    39

    Soluie:

    RestrngeriS pi ciR1 R2 R3 R4

    s1 0.3 00

    s2 0.25 10

    s3 0.15 11

    s4 0.15 010

    s5 0.10 0110

    s6 0.05 0111

    0.3

    0.25

    0.15

    0.15 0100.15 011

    0.30.3

    0.25 10

    0.15 11

    0.40.3 000.3 01

    0.6 00.4 1

    b) =

    ==6

    1

    45.2i

    iinpn - lungimea medie a cuvintelor de cod

    =

    ==6

    12 39.2log)(

    i

    ii ppSH - entropia sursei informaionale S.

    %9898.045.2

    39.2=== - eficiena codrii

    31.22

    2.45u

    c

    nF

    n= = = - factorul de compresie iarnu se obine din relaia Mnu 2log= ,M

    fiind numrul de mesaje din sursa S, x reprezint cel mai mic ntreg mai mare sau egal cux.

    2.4. Algoritm Huffman dinamic.

    Se pornete de la premiza c varianta static a algoritmului de compresie Huffman estebine neleas.

    Ideea de baz n codarea Huffman dinamic este folosirea pentru codarea simbolului ti+1din mesaj, a unui arbore de codare (un dicionar de codare sub forma unui arbore binar) construit

    pe baza primelori simboluri din mesaj. Dup transmiterea simbolului ti+1 se va revizui arborelede codare n vederea codrii simbolului ti+2. Exist mai multe variante ale algoritmului Huffmandinamic (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 urmtorulalgoritm: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 dreaptacare conine simbolul aprut, ponderea acestuia devenind egal cu 1;

    4.citim urmtoarea liter din mesaj;

  • 7/29/2019 L06_TCI_Algoritmi de Compresie Folositi in Sistemele Moderne de Arhivare_Codarea Huffman

    4/6

    40

    5.dac litera este deja n arbore transmit codul ei din arbore. Codul literii din arbore seformeaz 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 aveaataate simbolul '0'. Apoi se trece direct la pasul 7;

    6.dac litera nu este n arbore atunci transmit codul nodului terminal care nu conine niciun 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 cazcontrar 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 nuli unul la dreapta care conine simbolulaprut, ponderea acestuia devenind egal cu 1;

    5.citesc codul transmis (bit cu bit) pn cnd codul se afl n arbore, adic pn cnd amajuns 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 literatransmis n clari o transmit mai departe, apoi trecem direct la pasul 8;

    7.dac nodul ataat codului citit conine un simbol atunci decodez codul ataat lui prinlitera pe care o conine i transmit litera mai departe (la utilizator);

    8. reactualizm arborele; dac mesajul s-a terminat, atunci decodarea este terminat, iar ncaz 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 reprezintlungimea n bii a mesajului codat), unde wj reprezint ponderea frunzei j asociat simboluluij(numrul de apariii ale simbolului j), iar lj lungimea codului asociat frunzei respective. Dacreactualizarea arborelui se face dup procedeul de mai jos atunci aceast minimizare estesatisfcut.

    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 frunzgoal dac simbolul nu este nc n arbore;2. Dacq este frunz goal atunci nlocuiesc nodul respectiv cu un nod printe i dou noduriderivate (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 iarnodul printe cu 3. Se incrementeaz numrul de ordine al celorlalte noduri. Apoi se noteaz cu qnodul derivat din dreapta tocmai creat. Tot acestui nod i se asociazi simbolul citit ti care nueste n arbore;

  • 7/29/2019 L06_TCI_Algoritmi de Compresie Folositi in Sistemele Moderne de Arhivare_Codarea Huffman

    5/6

    41

    3. Ponderea nodului q cruia i s-a asociat simbolul citit ti se incrementeaz cu o unitate. Semodific ponderea nodurilor intermediare i a nodului rdcin astfel nct aceasta s fie egal cusuma ponderilor fiilor si. Se schimb nodul q cu nodul de pondere cea mai mici cu cel maimare numr de ordine dac exist situaii de acest tip pn cnd se ajunge la nodul rdcin.

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

    14 a

    01

    Arbore iniialArbore dup a

    Arbore dup b

    25

    13 14 a

    01 0 12 b

    Frunz 0Pondere nod (egal cu numrul de apariii alecaracterului n mesaj n cazul nodurilor frunz,sau cu suma ponderilor nodurilor derivate dinacel nod n cazul nodurilor intermediare)

    13

    01 0 12 aNod frunz cecorespundecaracterelor folosite nmesaj

    Ramur stngacodat cu 0

    Ramur dreaptacodat cu 1

    Numrul deordine alnodului narbore

    Arbore dup c

    16 a25

    27

    13 14 b

    01 0 12 c

    Interschimbarenoduri

    Arbore dup b

    2615 a

    37

    13 14 b

    01 12 c

    2615 a

    37

    13 24 b

    01 12 c

    2625 b

    47

    13

    01 12 c

    Caracter asociat

    frunzei

  • 7/29/2019 L06_TCI_Algoritmi de Compresie Folositi in Sistemele Moderne de Arhivare_Codarea Huffman

    6/6

    42

    Figura 2. Reactualizarea arborelui la citirea primului simbol b

    3. Desfurarea lucrrii

    a) Fie sursa informaional S caracterizat de distribuia

    2.005.015.03.02.01.0: 654321

    ssssssS . S se realizeze o codare binar Huffman statici apoi s

    se calculeze eficiena codrii i factorul de compresie.b) Pentru secvena abcdeaa desenai evoluia arborelui de codare dinamic Huffman FGKi

    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).

    13

    01 0 12 a

    25

    13 14 a

    01 0 12 b

    Ilustrarea pasului ncare se efectueazincrementareaponderilor n nod

    15

    03 14 a

    01 0 02 b

    Caracterul b nu esten arbore, de aceeanodul qeste nodul nuldin care se creeazcele doua noduri fii depondere nul

    Tot n acest passe efectueazincrementareanumrului deordine alcelorlalte nodurideja existente