Documente Academic
Documente Profesional
Documente Cultură
Algoritmidecompresieadatelor
Lucrarea1:IntroducerenCompresiaDatelor
Lucrarea2:AlgoritmulShannonFano
Lucrarea3:AlgoritmulHuffmanstatic
Lucrarea4:AlgoritmulHuffmandinamic
Prof.DanTEFNOIU<danny@indinf.pub.ro>
Asist.AlexandruDumitracu<dumalex@ecosys.pub.ro>
Prep.IonuCHIOPU<ionutz_schiopu_24@yahoo.com>
CD#31/18
A.Obiective
Implementarea Algoritmului de compresie static al lui Huffman. Testarea performanei acestuia, prin
comparaiecucelealeAlgoritmuluiShannonFanoialeprogramelordeuzgeneralWinZIPiWinRAR.
B.Suportteoretic
Metoda propus de D.A.Huffman n 1952 pstreaz o mare parte dintre caracteristicile Metodei
ShannonFano. Mai precis, fazele de compresie i decompresie trec prin aceleai etape. Diferena apare n
maniera de construcie a arborelui binar, fapt care aduce o uoar mbuntire a performanelor de
compresie.Continumsopermcualfabetulstaticdeordin0.
nMetodaShannonFano,arboreleafostconstruitplecnddelardcin(alfabetul A 0 )sprefrunzele
ocupatedesimboli.Codulasociatunuisimbolafostconstruitdinsprebitulcelmaisemnificativsprebitulmai
puinsemnificativ.
nMetodaHuffman,construciaarboreluipleacdelafrunzesprerdcin.Aceastaimplicoalctuirea
codurilornsensinvers,delabitulcelmaipuinsemnificativ,labitulcelmaisemnificativ.
AlgoritmuldeconstrucieaarboreluibinardetipHuffmanesteprezentatncontinuare.
Algoritmul3.1.ConstruciaarboreluibinarpentrucompresiaHuffman.
1. Separcurgesetulde N N datenmodsecvenial(simbolcusimbol)iseconstruietealfabetul
de ordin 0 ( A 0 ), contoriznd numrul de apariii ale fiecrui simbol ntlnit. Astfel, fiecrui
simbol s A 0 iseasociazuncontor N ( s ) N .
CD#32/18
2. Serearanjeazsimboliialfabetului A 0 nordineadescresctoareanumerelordeapariii:
A 0 = {s1 , s2 ,..., sN }
.
(
)
(
)
...
(
)
N
s
N
s
N
s
N
1
2
n cazul n care simboli diferii au numre egale de apariii, ei vor fi ordonai lexicografic.
Ordonareaalfabetuluinueste,ns,strictnecesar.Totui,eaesterecomandat,pentruaaranja
frunzele arborelui binar ntro manier natural i, mai ales, pentru a permite o indexare mai
uoaranodurilorintermediarealeacestuia.Casseneleagmaibinemanieradeconstrucie
aarboreluibinar,elementelealfabetuluivorfirenotate(ireindexate)astfel:
A 0 = {tN +k 1 = sk }k1, N .
Simbolii tN , tN +1 ,, t2 N 1 vorfiutilizaipentruaetichetafrunzelearboreluibinar,iaralfabetul A 0
devine primul alfabet curent al algoritmului i va fi renotat prin A 0,N . Alfabetul curent al
algoritmuluivafinotatprin A 0,( N k ) ,undeindicele k variazngama 0, N 1 .Aadar,iniial, k = 0
ifrunzelearboreluibinarsuntetichetatecusimboliiprimuluialfabetcurent.
3. Construcia arborelui binar se realizeaz simultan cu construcia noului alfabet curent A 0,( N k 1)
(unde k 0, N 2 ). Pentru al construi pe acesta din urm din vechiul alfabet A 0,( N k ) , se aplic
urmtoarearegul:seidentific2dintresimboliiceimaislabi(adicavndcontoarelecelemai
mici)dinvechiulalfabetiseelimin,nlocuindulecuunsimbolvirtual(notatadhocprin),
care are contorul egal cu suma contoarelor acestora; dac exist mai mult de 2 simboli slabi
avndacelaicontor,sevoralegeultimii2ntlniinalfabet.Numaiestenecesarreordonarea
noului alfabet curent, astfel obinut. n plus, cardinalul su scade cu o unitate fa de cel al
alfabetuluicurentprecedent.Aadar:
CD#33/18
N (tN k 1 ) = N (t p ) + N (tq )
#A 0,( N k 1) = #A 0,( N k ) 1 = N k 1.
Simbolul virtual astfel produs va eticheta un nod intermediar al arborelui binar, avnd ca
descendeni cele dou noduri etichetate de simbolii eliminai. Cei 2 simboli eliminai ( t p i tq )
eticheteaz:
doufrunzealarborelui,dacaparinalfabetului A 0,N ;
unnodintermediaralarboreluiiofrunz,dacdoarunuldintreeiaparinealfabetului A 0,N ;
dounoduriintermediarealearborelui,dacniciunuldintreeinuaparinealfabetului A 0,N .
n acest fel, fiecare nod intermediar al arborelui posed cte doi descendeni direci (fii), iar
contorulfiuluidinstngaestecelpuinegalcucelalfiuluidindreapta.Arceledelegturvorfi
etichetate cu 0 (pentru fiul din stnga) i cu 1 (pentru fiul din dreapta). Aceste etichete
reprezint,defapt,valorilebiilornoilorcoduriasociatesimbolilor.
4. Serepetpasulanteriorpentrufiecarealfabetcurent A 0,( N k 1) (unde k 0, N 2 ),adicde N 1
ori,pncndarboreluibinarisestabileterdcina( t1 ).
5. Se reindexeaz nodurile arborelui astfel nct fiii oricrui nod care posed descendeni s fie
etichetai cu indici consecutivi (de la stnga la dreapta). (Reindexarea nodurilor nu este o
operaieabsolutnecesar,daresteutilnfazadedecompresie.)
CD#34/18
Regula de baz pentru structura arborelui binar construit cu ajutorul acestui algoritm este cea a
adugrii de noi noduri intermediare prin nsumarea ponderilor simbolilor celor mai slabi, avansnd de la
frunzesprerdcin.Deexemplu,narborelefinal(cunodurireindexate),nodulnotatcu tn are2fii: tm i tm+1 ,
canimagineaurmtoare:
tn ( N (tn )) = tn ( N (tm )) + tn ( N (tm +1 ))
0
tm ( N (tm ))
1
tm +1 ( N (tm +1 ))
Aacumseconstat,fiecarenodalarboreluibinarestecaracterizatdedouinformaii:oetichet(detip
tn )(carednumelenoduluiilindexeaz)iopondere(contorul N ( tn ) ).Nodurilesuntindexatenordinea
descresctoareaponderilorlor,ncepnddelardcinsprefrunze,datoritultimuluipasalalgoritmului.
Rdcina( t1 )deinepondereamaxim,deoareceaceastaesteegalcusumatuturorcontoarelor(adic
volumul setului de date). Arborele are, n final, 2 N 1 noduri i construcia sa se efectueaz n N 1 pai.
Fiecare nod va avea asociat un cod unic, obinut prin concatenarea valorilor (0 sau 1 ale) arcelor ce unesc
rdcinacuacelnod.
U Exemplu
Serevinelaexempluldincadrulseciuniiprecedente(MetodaShannonFano):
D : IT0IS0BETTER0LATER0THAN0NEVER.
Pentruacesta,sevaconstruimaintiarborelebinardetipHuffman.Apoisevaenumerairuldebiiai
datelorcomprimatei,nfinal,sevaindicamanieradedecompresie.
CD#35/18
A 0,13
0 E T R A
I N
. B H
L S V
N ( s ) 5 5 5 3 2 2 2 1 1 1 1 1 1
VomparcurgeAlgoritmul3.1,indicndfiecarepasprinvaloareaindicelui k .Vorfi12pai.Pentruprimii10
pai,ilustrmstructuraarboreluiparialiformaalfabetuluicurent(indicndprincaracterealdinesimbolul
virtualnlocuitor).Datoritsimplitiilor,ultimii2paiaufostcompactai,doarstructuraarboreluifinalfiind
reprezentat(cunodurilereindexate).
k = 1:
t13 (5) t14 (5) t15 (5) t16 (3) t17 (2) t18 (2) t19 (2) t20 (1) t21 (1) t22 (1) t23 (1) t24 (1) t25 (1)
H
L
S V
.
E
T
R
B
I
A
N
t12 (2)
t12 (2)
0
S
V
t24 (1) t25 (1)
CD#36/18
Nod
t13
t14
t15
t16
t17
t18
t19
t12
t20
t21 t22
t23
A 0,12
N ( s)
k = 2:
t13 (5) t14 (5) t15 (5) t16 (3) t17 (2) t18 (2) t19 (2) t12 (2) t20 (1) t21 (1) t22 (1) t23 (1)
.
H
E
T
R
B
A
I
L
N
t11 (2)
t11 (2)
0
t12 (2)
0
S
V
H
L
t22 (1) t23 (1) t24 (1) t25 (1)
Nod
t13
t14
t15
t16
t17
t18
t19
t11 t12
t20
t21
A 0,11
N (s)
CD#37/18
k = 3:
t13 (5) t14 (5) t15 (5) t16 (3) t17 (2) t18 (2) t19 (2) t11 (2) t12 (2) t20 (1) t21 (1)
E
T
R
A
I
.
N
B
t10 (2)
t10 (2)
0
t11 (2)
.
B
t20 (1) t21 (1)
t12 (2)
0
S
V
H
L
t
(1)
t
t22 (1) t23 (1) 24
25 (1)
Nod
t13
t14
t15
t16
t17
t18
t19
t10
t11 t12
A 0,10
N (s)
k = 4:
t13 (5) t14 (5) t15 (5) t16 (3) t17 (2) t18 (2) t19 (2) t10 (2) t11 (2) t12 (2)
E
T
R
A
I
N
t9 (4)
CD#38/18
t9 (4)
1
t10 (2)
0
t12 (2)
t11 (2)
.
B
t20 (1) t21 (1)
S
V
H
L
t
(1)
t
25 (1)
t22 (1) t23 (1) 24
Nod
t13
t14
t15
t9
t16
t17
t18
t19
t10
A 0,9
N ( s)
k = 5:
t13 (5) t14 (5) t15 (5) t9 (4) t16 (3) t17 (2) t18 (2) t19 (2) t10 (2)
R
E
T
A
I
t8 (4)
CD#39/18
t8 (4)
t9 (4)
1
0
N
t19 (2)
t10 (2)
0
t12 (2)
t11 (2)
0
S
V
B
H
L
t
(1)
t
t20 (1) t21 (1) t22 (1) t23 (1) 24
25 (1)
.
Nod
t13
t14
t15
t8
t9
t16
t17
t18
A 0,8
N (s)
k =6:
t13 (5) t14 (5) t15 (5) t8 (4) t9 (4) t16 (3) t17 (2) t18 (2)
E
T
R
A I
t7 (4)
CD#310/18
t7 (4)
0
t8 (4)
t9 (4)
1
A
N
I
t17 (2) t18 (2) t19 (2)
t10 (2)
0
t12 (2)
t11 (2)
S
V
B
H
L
t
(1)
t
t20 (1) t21 (1) t22 (1) t23 (1) 24
25 (1)
.
Nod
t13
t14
t15
t7
t8
t9
t16
A 0,7
N (s)
k = 7:
t13 (5) t14 (5) t15 (5) t7 (4) t8 (4) t9 (4) t16 (3)
E
T
R
t6 (7)
CD#311/18
t6 (7)
0
t7 (4)
0
t8 (4)
R
t16 (3)
t9 (4)
t11 (2)
t10 (2)
0
A
N
I
t17 (2) t18 (2) t19 (2)
t12 (2)
0
S
V
B
H
L
t
(1)
t
t20 (1) t21 (1) t22 (1) t23 (1) 24
25 (1)
.
Nod
t6
t13
t14
t15
t7
t8
A 0,6
N (s)
k = 8:
t6 (7) t13 (5) t14 (5) t15 (5) t7 (4) t8 (4)
E
T
t5 (8)
CD#312/18
t5 (8)
0
t7 (4)
0
t6 (7)
t8 (4)
0
t9 (4)
t11 (2)
t10 (2)
A
N
I
t17 (2) t18 (2) t19 (2)
R
t16 (3)
t12 (2)
S
V
.
B
H
L
t20 (1) t21 (1) t22 (1) t23 (1) t24 (1) t25 (1)
Nod
t5
t6
t13
t14
t15
A 0,5
N ( s)
k =9:
t5 (8) t6 (7) t13 (5) t14 (5) t15 (5)
E
T
t4 (10)
CD#313/18
t5 (8)
t4 (10)
0
E
T t7 (4)
t14 (5) t15 (5)
0
1
t6 (7)
t8 (4)
t9 (4)
A
N
I
t17 (2) t18 (2) t19 (2)
t11 (2)
t10 (2)
0
R
t16 (3)
t12 (2)
0
S
V
.
B
L
H
t20 (1) t21 (1) t22 (1) t23 (1) t24 (1) t25 (1)
Nod
t4
t5
t6
t13
A 0,4
N ( s)
10
k = 10 :
t4 (10) t5 (8) t6 (7) t13 (5)
t3 (12)
CD#314/18
t3 (12)
0
t5 (8)
t4 (10)
0
t6 (7)
E
T t7 (4)
t14 (5) t15 (5)
0
1
t8 (4)
0
A
N
I
t17 (2) t18 (2) t19 (2)
R
t16 (3)
t9 (4)
1
t10 (2)
0
t12 (2)
t11 (2)
S
.
B
L
H
t20 (1) t21 (1) t22 (1) t23 (1) t24 (1)
Nod
t3
t4
t5
A 0,3
12 10
N (s)
t7 (5)
V
t25 (1)
k {11,12} :
t3 (12) t4 (10) t5 (8)
t2 (18)
t2 (18) t3 (12)
t1 (30)
CD#315/18
t1 (30)
0
t3 (12)
t2 (18)
t5 (8)
t4 (10)
0
t6 (7)
t7 (4)
E
T
t14 (5) t15 (5)
0
1
t8 (4)
0
A
N
I
t17 (2) t18 (2) t19 (2)
R
t16 (3)
t9 (4)
t11 (2)
t10 (2)
0
t13 (5)
t12 (2)
0
S
.
B
L
H
t20 (1) t21 (1) t22 (1) t23 (1) t24 (1)
V
t25 (1)
Informaianscrispefluxuldeieire,corespunztoarearboreluibinarconstruitanterior,vaartacan
Tabelele3.1i3.2.
Tabelul3.1.InformaieauxiliarstaticdetipHuffman.
Cod
13 32
82
65
72
78
Info
N 0 N E N T N
Nr.
bii
32
32
32
32
69
32
84
32
46
66
72
76
83
86
N .
32
32
32
32
32
32
CD#316/18
Tabelul3.2.InformaieutilstaticdetipHuffman.
Cod
0101 001
11
0101 10010
11
01111
000
001
001
000
101
11
10001
1100
Info
Nr.bii
Cod
001
11
001
10000
1000
0110
11
0110
000
101
01110
Info
Nr.bii
000 101
10011 000
Practic, volumul de date comprimate nu sa schimbat, n acest exemplu, fa de cel din lucrarea
precedent. Doar noile coduri utile sunt altele. ns, n cazul multor seturi de date (sensibil mai lungi dect
acesta),MetodaHuffmanestemaieficientdectMetodaShannonFano.
idecompresiadatelorsedesfoarcancazulMetodeiShannonFano.Semnalmtotuifaptulc,n
cazul implementrii celor dou metode pe un mijloc automat de calcul, arborele construit prin Metoda
Huffman este mai uor de reprezentat i de construit dect arborele ShannonFano, programul avnd o
complexitateuormairedus.
CD#317/18
C.Sarcinidelucru
Tema1(ImplementareaalgoritmilorHuffmanstatici)
a. Scriei3rutinecorespunztoareAlgoritmului3.1,imetodelordecompresiedecompresiedinMetoda
Huffmanstatic.
b. Verificai corectitudinea lor cu ajutorul unui program de test aplicat exemplului din subseciunea
precedent(textultrebuiesfiereconstituitperfect).
c. Evaluaifactoruldecompresierealizatnacestexemplu(inndcontideinformaiaauxiliar).Este
capabilmetodasrealizezecompresia?
Tema2(TestareaalgoritmilorHuffmanstatici)
a. Scriei un program care realizeaz compresia i decompresia celor 12 fiiere din corpusul de date
descrisnLucrarea1,cuajutorulrutinelordelatemaprecedent.
b. Calculainormadifereneidintresetuliniialdedateiceldecomprimat.Pentrufiecaresetdedate,
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 Metodei
ShannonFano i a celor dou programe de uz general WinZIP i WinRAR. (Utilizai funcia fread
pentruaevaluaexactnumruldebiiaiarhivelorprodusedeacesteutilitare.)Comentairezultatele
obinute,cureferirelacompromisuldintrecomplexitateaalgoritmilordecompresieiperformanele
acestora.
CD#318/18