Beruflich Dokumente
Kultur Dokumente
1
Codarea 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 _)
2
Codarea 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
Evident: 4/20 + 6/20 + 4/20 + 3/20 + 3/20 = 20/20
3
Codarea 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
M A R E _
4
Codarea 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
5
Codarea Huffman
4/20 6/20 4/20 6/20
M A R *
E _
3/20 3/20
6
Codarea Huffman
8/20 6/20 6/20
* A *
M R E _
4/20 4/20 3/20 3/20
7
Codarea Huffman
8/20 12/20
* *
M R A *
4/20 4/20 6/20
E _
3/20 3/20
8
Codarea Huffman
20/20
*
* *
M R A *
4/20 4/20 6/20
E _
3/20 3/20
Am ajuns la un singur arbore, moment in care ne
oprim
Vom eticheta fiecare ramura spre stanga cu 0 si
fiecare ramura spre dreapta cu 1
9
Codarea Huffman
20/20
*
0 1
0
* 1 0
* 1
M R A *
0 1
4/20 4/20 6/20
E _
3/20 3/20
Caracterele din sirul initial au ajuns frunze in arborele
Huffman
Drumul de la radacina la fiecare frunza va da codul
Huffman al caracterului corespunzator frunzei
10
Codarea Huffman
Astfel, vom avea:
M codul 00; A codul 10; R codul 01;
E codul 110; _ codul 111
11
Codarea 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
12
Codarea 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
13
Codarea 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
14
Codarea 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)
15
Codarea Huffman
Daca codurile Huffman nu ar fi avut proprietatea de prefix, am fi
avut mari probleme la decodificarea unui sir
16