Documente Academic
Documente Profesional
Documente Cultură
Una dintre cele mai rspndite tehnici de compresie a fiierelor text, care, n funcie de
caracteristicile fiierului ce urmeaz a fi comprimat, conduce la reducerea spaiului de memorie
necesar cu 20%-90%, a fost descoperit de D. Huffman n 1952 i poart numele de codificare
(cod) Huffman. n loc de a utiliza un cod n care fiecare caracter s fie reprezentat pe 7 sau pe 8
bii (lungime fix), se utilizeaz un cod mai scurt pentru caracterele care sunt mai frecvente i
coduri mai lungi pentru cele care apar mai rar.
a b c d e f
a b c d e f
frecven 45 13 12 16 9 5
a b c d e f
cod variabil 0 101 100 111 1101 1100
ar fi necesari doar 224.000 bii (deci o reducere a spaiului de memorie cu aproximativ 25%).
Problema se reduce deci la a asocia fiecrui caracter un cod binar, n funcie de frecven,
astfel nct s fie posibil decodificarea fiierului comprimat, fr ambiguiti. De exemplu, dac
am fi codificat a cu 1001 i b cu 100101, cnd citim n fiierul comprimat secvena 1001 nu
putem decide dac este vorba de caracterul a sau de o parte a codului caracterului b.
Pentru a evita ambiguitile este necesar ca nici un cod de caracter s nu fie prefix al unui
cod asociat al unui caracter (un astfel de cod se numete cod prefix).
D. Huffman a elaborat un algoritm care construiete un cod prefix optimal, numit cod
Huffman. Prima etap n construcia codului Huffman este calcularea numrului de apariii ale
fiecrui caracter n text.
Fie C={c1,c2,...,cn} mulimea caracterelor dintr-un text, iar f1,f2,...,fn, respectiv, numrul
lor de apariii. Dac li ar fi lungimea irului ce codific simbolul ci, atunci lungimea total a
reprezentrii ar fi :
n
L li fi
i 1
Scopul nostru este de a construi un cod prefix care s minimizeze aceast expresie.
Pentru aceasta, construim un arbore binar complet n manier bottom-up astfel :
Fig. 1.3
Pas 1: Unific arborii corespunztori lui e i f, deoarece au frecvenele cele mai mici:
Fig. 1.4
Fig. 1.5
Pas 3: Unific arborele corespunztor lui d i arborele obinut la primul pas, cu rdcina ce are
frecvena 14:
Fig. 1.6
Fig. 1.7
Pas 5: Unificnd ultimii doi arbori, obin arborele Huffman asociat acestui set de caractere cu
frecvenele specificate iniial.
Fig. 1.8
Nodurile terminale vor conine un caracter i frecvena corespunztoare caracterului;
nodurile interioare conin suma frecvenelor caracterelor corespunztoare nodurilor terminale din
subarbori.
Arborele Huffman obinut va permite asocierea unei codificri binare fiecrui caracter.
Caracterele fiind frunze n arborele obinut, se va asocia pentru fiecare deplasare la stnga pe
drumul de la rdcin la nodul terminal corespunztor caracterului un 0, iar pentru fiecare
deplasare la dreapta un 1.
Obinem codurile :
a b c d e f
Observaii
- caracterele care apar cel mai frecvent sunt mai aproape de rdcin i astfel lungimea
codificrii va avea un numr mai mic de bii.
- la fiecare pas am selectat cele mai mici dou frecvene, pentru a unifica arborii
corespunztori.
- arborii Huffman nu sunt unici. Adic, poi avea arbori diferii, pentru acelai set de
frunze cu aceleai frecvene. De exemplu,dac ai frunze cu aceeai frecven, poziia unora fat
de celelalte nu este important.