Professional Documents
Culture Documents
1
/copul nostru este de a construi un cod prefix care s minimizeze
aceast expresie. 8entru aceasta, construim un arbore binar complet n
manier bottom-up astfel 4
-9niial, considerm o partiie a mulimii !>0 0c
1
,f
1
1,0c
2
,f
2
1, ...,
0c
n
,f
n
11, reprezentat printr-o pdure de arbori formai dintr-un singur
nod.
-8entru a obine arborele final, se execut n-) operaii de
unificare.
"nificarea a doi arbori ?
1
i ?
2
const n obinerea unui arbore ?,
al crui subarbore stng este ?
1
, subarbore drept ?
2
, iar frecena
rdcinii lui ? este suma frecenelor rdcinilor celor doi arbori. @a
fiecare pas unificm # arbori ale cror rdcini au frecenele cele mai
mici.
219
'e exemplu, arborele (uffman asociat caracterelor 0a,b,c,d,e,f1
cu frecenele 07*,)3,)#,)2,&,*1 se construiete pornind de la cele cinci
noduri din figura )4
=ig. ).
8as )4 "nific arborii corespunztori lui e i f, deoarece au frecenele
cele mai mici4
=ig. #.
8as #4 "nific arborii corespunztori lui b i c4
=ig. 3.
8as 34 "nific arborele corespunztor lui d i arborele obinut la primul
pas, cu rdcina ce are frecena )74
=ig. 7.
8as 74 "nific arborii ce au frecenele #* i 3$.
=ig. *.
8as *4 "nificnd ultimii doi arbori, obin arborele (uffman asociat
acestui set de caractere cu frecenele specificate iniial.
220
=ig. 2.
Aodurile terminale or conine un caracter i frecena
corespunztoare caracteruluiB nodurile interioare conin suma
frecenelor caracterelor corespunztoare nodurilor terminale din
subarbori.
?rborele (uffman obinut a permite asocierea unei codificri
binare fiecrui caracter. !aracterele fiind frunze n arborele obinut, se a
asocia pentru fiecare deplasare la stnga pe drumul de la rdcin la
nodul terminal corespunztor caracterului un $, iar pentru fiecare
deplasare la dreapta un ).
Cbinem codurile 4
a b c d e f
cod $ )$$ )$) ))$ )))$ ))))
Observaii
- caracterele care apar cel mai frecent sunt mai aproape de
rdcin i astfel lungimea codificrii a aea un numr mai mic de bii.
- la fiecare pas am selectat cele mai mici dou frecene, pentru a
unifica arborii corespunztori. 8entru extragerea eficient a minimului
om folosi un min-heap. ?stfel timpul de execuie pentru operaiile de
extragere minim, inserare i tergere a fi, n cazul cel mai defaorabil,
de O(log n).
Algoritm de construcie a arborelui Huffman
*
8as ). 9niializare 4
- fiecare caracter reprezint un arbore format dintr-un singur nodB
- organizm caracterele ca un min-heap, n funcie de frecenele de
apariieB
*
8rogramul Huffman realizeaz6 compactarea Di decompactarea unui fiDier text
utiliznd arbori (uffman.
221
8as #. /e repet de n-) ori 4
- extrage succesi E i F, dou elemente din heap
- unific arborii E i F 4
- creaz G un nou nod ce a fi rdcina arborelui
- GH.st 4> E
- GH.dr 4> F
- GH.frec 4> EH.frecIFH.frec
- insereaz G n heapB
8as 3. /ingurul nod rmas n heap este rdcina arborelui (uffman. /e
genereaz codurile caracterelor, parcurgnd arborele (uffman.
Analiza complexitii
9niializarea heapului este liniar. 8asul # se repet de n-) ori i
presupune dou operaii de extragere a minimului dintr-un heap i de
inserare a unui element n heap, care au timpul de execuie de C-log n..
'eci complexitatea algoritmului de construcie a arborelui (uffman este
de O(n log n).
Corectitudinea algoritmului
Trebuie s demonstrm c algoritmul lui (uffman produce un
cod prefix optimal.
Lema 1.
=ie x, ; !, dou caractere care au frecena cea mai mic.
?tunci exist un cod prefix optimal n care x i ; au codificri de aceeai
lungime i care difer doar prin ultimul bit.
Demonstraie
=ie T arborele binar asociat unui cod prefix optimal oarecare i
fie a, b dou noduri de pe nielul maxim, care sunt fiii aceluiai nod.
8utem presupune fr a restrnge generalitatea c fJaK fJbK i fJxK
fJ;K. !um x i ; au cele mai mici frecene rezult c fJxK fJaK i fJ;K
fJbK. Transformm arborele T n TL, schimbnd pe a cu x 4
=ig. +.
Aotm cu !-T. costul arborelui T4
C T f c niv c
T
c C
( ) ( ) ( ) =
222
C T C T f x niv x f a niv a f x niv x f a niv a T T T T ( ) ( ') ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ' ' = +
C T C T f a f x niv a niv x
niv a niv x
niv x niv a
T T
T T
T T
( ) ( ') ( ( ) ( )) ( ( ) ( ))
( ) ( ) '
=
=
=
0, pentru c
- . - . L
{
n mod analog, construim arborele T, schimbnd pe x cu ;. Cbinem4
C T C T f b f y niv b niv y T T ( ') ( '') ( ( ) ( )) ( ( ) ( )) = 0.
'eci !-T. !-TLL., dar cum T era optimal deducem c Teste arbore
optimal i n plus x i ; sunt noduri terminale situate pe nielul maxim, fii
ai aceluiai nod.
M.<.'.
Observaie
'in lem deducem c pentru construcia arborelui optimal putem
ncepe prin a selecta dup o strategie :reed; caracterele cu cele mai mici
frecene.
Lema 2.
=ie T un arbore binar complet corespunzator unui cod prefix
optimal pentru alfabetul !. 'ac x i ; sunt dou noduri, fii ai aceluiai
nod z n T, atunci arborele TL obinut prin eliminarea nodurilor x i ; este
arborele binar complet asociat unui cod prefix optimal pentru alfabetul
!L > -!-0x,;1. 0 z1, fJzK fiind fJxKIfJ;K.
Demonstra!ie
niv x niv y niv z
c C x y niv c niv c
f x niv x f y niv y
f x f y niv z f z niv z f x f y
f z niv z f x f y
T T T
T T
T T
T T
T
( ) ( ) ( )
, , ( ) ( )
( ) ( ) ( ) ( )
( ( ) ( )) ( ( ) ) ( ) ( ) ( ) ( )
( ) ( ) ( ( ) ( )).
'
'
= = +
=
+ =
= + + = + + =
= + +
U
V
W
1
1
r o
'eci,
C T f c niv c C T f x f y
c C
T ( ) ( ) ( ) ( ') ( ( ) ( )) = = + +