Documente Academic
Documente Profesional
Documente Cultură
Calin Jebelea
Coduri Huffman
Coduri Huffman
Vom studia mersul algoritmului pe un exemplu
Fie sirul de intrare: MARE E MAREA MARMARA
Se parcurge sirul si se contorizeaza numarul de
aparitii ale fiecarui caracter distinct
Astfel:
M apare de 4 ori
A apare de 6 ori
R apare de 4 ori
E apare de 3 ori
<blank> (spatiul) apare de 3 ori (pentru o mai mare
claritate vom reprezenta caracterul spatiu prin simbolul
_)
Calin Jebelea
Coduri Huffman
Coduri Huffman
Cunoscand ca lungimea sirului este de 20 de
caractere, putem calcula foarte usor frecventele
(probabilitatile) de aparitie ale fiecarui caracter
Astfel:
M 4/20
A 6/20
R 4/20
E 3/20
_ 3/20
Calin Jebelea
Coduri Huffman
Coduri Huffman
Pentru fiecare caracter distinct vom construi un
arbore binar optim avand un singur nod
4/20
6/20
4/20
3/20
3/20
Calin Jebelea
Coduri Huffman
Coduri Huffman
In acest sens, la fiecare pas se aleg 2 dintre arborii binari optimi
disponibili, si anume acei 2 arbori binari optimi care au frecventele de
aparitie minime (minimul si urmatorul minim)
Daca sunt mai mult de 2 arbori in aceasta situatie, se vor alege
arbitrar 2 dintre ei
In cazul nostru, vom alege ultimii 2 arbori, ei avand frecventele de
aparitie minime
Se vor inlocui cei 2 arbori printr-unul singur, care are ca radacina un
caracter fictiv * si cei 2 arbori selectati ca subarbori (nu conteaza
plasarea pe stanga sau pe dreapta, ideea este ca unul din ei va fi
subarbore stang si celalalt subarbore drept)
Frecventa de aparitie a noului arbore va fi data de suma frecventelor
de aparitie a celor 2 subarbori componenti
Deoarece am inlocuit 2 arbori printr-unul singur, numarul total de
arbori a scazut cu o unitate
Calin Jebelea
Coduri Huffman
Coduri Huffman
4/20
6/20
4/20
6/20
*
E
3/20
3/20
Coduri Huffman
Coduri Huffman
8/20
6/20
6/20
4/20
4/20
3/20
3/20
Coduri Huffman
Coduri Huffman
8/20
12/20
4/20
4/20
6/20
*
E
3/20
3/20
Coduri Huffman
Coduri Huffman
20/20
*
*
4/20
4/20
6/20
*
E
3/20
3/20
Coduri Huffman
Coduri Huffman
20/20
0
0
4/20
4/20
6/20
1
0
3/20
3/20
Calin Jebelea
Coduri Huffman
10
Coduri Huffman
Astfel, vom avea:
Calin Jebelea
Coduri Huffman
11
Coduri Huffman
Se observa ca codurile Huffman obtinute in urma
algoritmului prezentat sunt mai scurte decat
codurile standard de 3 biti/caracter
Mai precis, fiecare aparitie a caracterelor M, A
sau R in sirul initial va duce la o economie de 1
bit iar fiecare aparitie a caracterelor E sau _
nu va cauza nici pierdere nici castig (se folosesc
tot 3 biti)
Nu intamplator, caracterele M, A si R sunt
caracterele care aveau frecventele de aparitie
cele mai mari, astfel incat economiile de care
aminteam se vor manifesta foarte des
Calin Jebelea
Coduri Huffman
12
Coduri Huffman
Practic, datorita faptului ca la fiecare pas am
selectat cei 2 arbori care aveau frecventele de
aparitie minime, caracterele cu frecvente de
aparitie relativ mari au fost lasate la urma, astfel
incat in arborele final sa se regaseasca mai sus
decat caracterele cu frecvente de aparitie mai
mici
Aceasta este ideea dominanta la arbori optimi,
deci arborele rezultat este, din acest punct de
vedere, un arbore optim
Calin Jebelea
Coduri Huffman
13
Coduri Huffman
Vom codifica sirul MARE E MAREA MARMARA
folosind codurile obtinute
Rezultatul este: 00 10 01 110 111 110 111 00 10
01 110 10 111 00 10 01 00 10 01 10
Sunt necesari 46 de biti
Codificarea cu 3 biti/caracter ar fi dus la 320 =
60 de biti, deci am realizat o compresie de 76,6%
Codificarea implicita cu 8 biti/caracter ar fi dus la
820 = 160 de biti deci am realizat o compresie
de 28,75% fata de aceasta codificare
Calin Jebelea
Coduri Huffman
14
Coduri Huffman
Codurile Huffman obtinute au proprietatea de
prefix
Proprietatea de prefix suna astfel: nici un cod nu
este prefix pentru alt cod
Aceasta proprietate este asigurata implicit din
modul de constructie al arborelui Huffman
Fiecare caracter ajunge o frunza in arbore, si nu
exista drum de la radacina la o frunza in totalitate
continut in alt drum de la radacina la o alta
frunza (o proprietate de bun simt a arborilor, in
general)
Calin Jebelea
Coduri Huffman
15
Coduri Huffman
Daca codurile Huffman nu ar fi avut proprietatea de
prefix, am fi avut mari probleme la decodificarea unui sir
Sa presupunem, prin absurd, ca am fi obtinut:
Calin Jebelea
Coduri Huffman
16