Sunteți pe pagina 1din 16

Compresia Datelor

---CODURILE HUFFMAN--

CUPRINS

1.
2.
3.
4.
5.
6.
7.
8.

Introducere
Tehnici de compresie i decompresie
Compresia fr pierderi
Compresia cu pierderi
Evaluarea compresiei
Codurile HUFFMAN
Aplicatie practica
Bibliografie

INTRODUCERE
Compresia datelor este un proces de codare prin care se urmrete
micorarea redundanei mesajului generat de o surs, pentru a reduce resursele
necesare memorrii sau transmiterii acestui mesaj. Deoarece, de regul, pentru
memorarea sau transmiterea unui mesaj se folosete, eventual ntr-o form
intermediar, reprezentarea prin simboluri binare a acestuia, i pentru c cele mai
multe metode de compresie folosesc metode de codare binar - binar, putem spune
c obiectivul compresiei const n reducerea numrului de simboluri binare necesar
pentru reprezentarea mesajului. Dup cum irul simbolurilor emise de surs este
mprit, pentru codare, n subiruri de aceeai lungime sau de lungime variabil, i
dup lungimea, constant sau variabil, a cuvintelor de cod, codurile de compresie
se clasific n bloc- bloc, bloc variabil, variabil bloc i variabil variabil, bloc
bloc indicnd aceeai lungime pentru subirurile sursei i cuvinte de cod de
lungime fix, iar variabil variabil corespunznd unor lungimi variabile ale
subirurilor i ale cuvintelor de cod. Din punct de vedere al msurii n care mesajul
refcut prin decompresie se aseamn cu cel original, asupra cruia s-a acionat
prin procesul de compresie, distingem dou categorii de algoritmi de compresie:
fr pierderi i cu pierderi. Algoritmii de compresie fr pierderi sunt reversibili,
prin decompresie obinndu-se mesajul original ntocmai.
Algoritmii de compresie cu pierderi au ca rezultat diferene relativ mici ntre
mesajul rezultat prin decompresie i cel original i sunt utilizai n compresia
imaginilor i a mesajelor video i audio. n cele ce urmeaz ne referim la algoritmii
2

de compresie fr pierderi, folosii pentru texte sau date pur binare. Dac se
dispune de mesajul complet nainte de a ncepe procesul de compresie, se pot
utiliza algoritmi statici de compresie, cum ar fi spre exemplu codarea Shannon
Fano i codarea Huffman static, care in seama de frecvena caracterelor n text,
caracterelor cu probabilitatea mai mare de apariie n text alocndu-li-se cuvinte de
cod mai scurte. Cu algoritmii de compresie adaptivi, dinamici, procesul de
compresie se realizeaz n timp real, probabilitatea de apariie a caracterelor fiind
aproximat permanent, pe msur ce sursa genereaz mesajul.
O msur uzual pentru aprecierea performanei unui algoritm de compresie
aplicat asupra unui mesaj este raportul de compresie, care poate fi definit ca
raportul dintre numerele de simboluri binare prin care mesajul este reprezentat
nainte i dup compresie. n afara metodelor de uz general, folosite pentru
compresia textelor, sunt folosite i metode care sunt specifice anumitor aplicaii,
exploatnd semantica local a datelor pentru a reduce redundana. Aceste metode
sunt numite metode dependente de semantic.

2. Tehnici de compresie i decompresie


Tehnicile sau algoritmii de compresie i de decompresie cuprind doi algoritmi:
unul care furnizeaz reprezentarea Xc pe mai puini bii a semnalului de intrare X
i algoritmul de reconstrucie care opereaz asupra lui Xc , pentru a produce
semnalul reconstruit X . Schemele de compresie se mpart n dou clase: compresie fr pierderi, cnd X = X ; - compresie cu pierderi, cnd X X . n
acest caz se realizeaz o compresie mai mare.

2.1. Compresia fara pierderi


Dup cum arat numele, aceasta nu implic pierderea de informaie, datele
iniiale fiind refcute exact din cele compresate. Aceast compresie se folosete de
obicei pentru semnale discrete ca text, date generate de calculator, unele tipuri de
informaie video, deoarece refacerea exact este esenial n cazul textelor (sensul

comunicrii), unor imagini (imagistic pentru diagnostic), numere (comunicri


bancare) etc.
2.2. Compresia cu pierderi
Compresia cu pierderi conduce la o rat de compresie superioar cu preul
pierderii de informaie, datele care au fost supuse compresiei neputnd fi refcute
exact. Aceast compresie este mai eficient cnd se aplic semnalelor imagistice
sau sonore, caz n care pierderea de informaie din afara percepiei vizuale sau
auditive umane poate fi tolerat. Multe tehnici de compresie cu pierderi pot fi
ajustate la diferite nivele de calitate. Evident, creterea acurateei semnalului
refcut se obine cu preul unei compresii mai reduse. Volumul compresiei depinde
att de mrimea redundanei sursei, ct i de eficiena reducerii acesteia.

3.Evaluarea compresiei
Un algoritm de compresie poate fi evaluat n funcie de: - necesarul de
memorie pentru implementarea algoritmului; - viteza algoritmului pe o anumit
main; - raportul de compresie; - calitatea reconstruciei. De obicei, ultimele dou
criterii sunt eseniale n adoptarea algoritmului de compresie. Uzual, performanele
compresiei pot fi exprimate prin raportul de compresie i rata de compresie.
Raportul de compresie este raportul dintre numrul de bii necesar reprezentrii
datelor nainte i dup compresie. Rata de compresie reprezint numrul mediu de
bii necesar reprezentrii unui eantion. n compresia cu pierderi, versiunea
reconstruit difer de varianta original i, pentru a determina eficiena
algoritmului de compresie, trebuie s existe mijloace de apreciere a diferenei
dintre semnalul original i cel reconstruit. Diferena dintre semnalul original i cel
reconstruit se numete distorsiune. Tehnicile de compresie cu pierderi se folosesc
de obicei pentru compresia semnalelor analogice, care se mai numesc forme de
und, motiv pentru care compresia semnalelor analogice mai poart denumirea de
codarea formelor de und. n cazul codrii semnalelor video i sonore destinatarul
este, de obicei, omul, al crui rspuns este dificil de apreciat, motiv pentru care se
folosesc msuri aproximative de determinare a calitii reconstruciei. Ali termeni
folosii n aprecierea diferenei dintre semnalul original i cel refcut este

fidelitatea i calitatea. Acestea sunt cu att mai ridicate, cu ct diferena dintre


versiunea reconstruit i cea original a sursei este mai mic.

4.CODURILE HUFFMAN
In Teoria Transmisiei Informatiei, codarea Huffman este un algortim de
codare entropic, folosit pentru compresia datelor fara pierderi. Termenul se refera
la folosirea unei tabela de cod de lungime variabila pentru codarea unui simbol
sursa (cum ar fi un caracter intr-un fisier) unde tabela de cod cu lungime variabili a
fost derivata intr-un mod particular bazat pe probabilitatea de aparitie a fiecarui
simbol posibil al sursei.
Acest cod a fost dezvoltat de catre David A. Huffman in timp ce isi facea
studiul de doctorat la MIT, si publicat in 1952 in lucrarea A Method for the
Construction of Minimum-Redundancy Codes (O metoda de constructie a
codurilor de redundanta minima). Huffman a devenit membru al facultatii MIT
dupa absolvire.
Codarea Huffman foloseste o metoda specifica de a alege reprezentarea
fiecarui simbol, rezultand un cod cu proprietatea ca fiecare succesiune de biti ce
reprezinta un simbol particular, nu este niciodata un prefix al altui simbol. Acest
cod are de asemenea proprietatea ca asigneaza simbolurilor cu probabilitatea de
aparitie cea mai mare, succesiunea cea mai scurta de biti.
Huffman a putut astfel sa dezvolte cea mai eficienta metoda de compresie de
acest tip. Nici o alta metoda de asignare a unei secvente de biti unor simboluri ale
unei surse, nu poate produce o marime medie mai mica a sirului de iesire, atunci
cand frecventa de aparitie a simbolurilor este aceea folosita in creearea codului. In
5

schimb, a fost mai tarziu gasita o metoda ce poate face asta in timp liniar, daca
probabilitatile de intrare sunt sortate. Desi codarea Huffman este optima pentru o
codare simbol cu simbol cu distributia probabilitatilor cunoscute. De exemplu
codarea aritmetica si LZW de multe ori au capacitati de compresie mai bune.
Ambele metodele pot combina un numar arbitrar de simboluri pentru o codare mai
eficienta, si in general sa se adapteze statisticilor de intrare. Acestea sunt utile in
mod deosebit, atunci cand probabilitatile de intrare nu sunt cunoscute precis.

Algoritmul Huffman
Ideea care st la baza acestui algoritm este aceea de a atasa coduri de
lungime mic (exprimat n biti) simbolurilor furnizate de o surs de informatie si
a cror frecvent de aparitie este mare, si de a atasa coduri de lungime mai mare
simbolurilor a cror frecvent de aparitie este mic. n concluzie, folosind acest
algoritm se reduce lungimea medie a codurilor folosite pentru a reprezenta
simbolurile alfabetului. Codurile generate de acest algoritm sunt optime n cazul n
care toate frecventele de aparitie ale simbolurilor sunt puteri ntregi ale lui 1/2.
Algoritmul lui Huffman const n construirea unui arbore binar n care fiecare nod
are fie nici un fiu, fie exact 2 fii, n care frunzele reprezint simbolurile generate de
sursa de informatie si au atasat un cost egal cu frecventa de aparitie a acestora, iar
nodurile interne au atasat un cost egal cu suma costurilor fiilor. Prin urmare,
rdcina arborelui are costul 1. Atunci cnd se cunosc frecventele de aparitie ale
simbolurilor generate de o surs de informatie S si faptul c sursa a generat n total
m simboluri distincte ale unui alfabet, constructia arborelui binar devine foarte
simpl. Primul pas const n construirea unei pduri format din m arbori. Fiecare
arbore din pdure are un singur element care contine un simbol si frecventa lui de
aparitie. Toti cei m arbori din pdure sunt distincti (nu exist doi arbori al crui
element s contin acelasi simbol). n continuare, la fiecare pas se elimin cte doi
arbori din pdure pentru care costul rdcinii este minim. Acesti doi arbori vor fi
subarborii unui nod al crui cost va fi egal cu suma frecventelor celor doi arbori
eliminati din pdure. Arborele nou creat se adaug n pdure Algoritmul se termin
6

n momentul n care n pdure mai rmne un singur arbore, adic dup efectuarea
a m - 1 iteratii. Din analiza acestui algoritm rezult faptul c drumul de la rdcin
pn la frunzele care au costul mai mic este mai mare dect drumul de la rdcin
pn la frunzele care au costul mai mare. Exist trei variante des aplicate ale
acestui algoritm:
algoritmul Huffman static;
algoritmul Huffman semi-static;
algoritmul Huffman dinamic.
Diferentele dintre cele trei variante sunt urmtoarele: n cazul variantei
statice, att compresorul, ct si decompresorul detin acelasi arbore de compresie
calculat pe baza unor frecvente fixe de aparitie si nu mai este necesar calcularea
unui arbore nou si nici transmiterea acestuia. Dezavantajul acestei metode este c,
dac frecventele de aparitie ale simbolurilor generate de o surs difer foarte mult
de cele fixe utilizate, atunci s-ar putea ca pentru simboluri cu frecvent mare de
aparitie s fie transmise coduri foarte lungi si astfel cantitatea de informatie
comprimat poate s depseasc cu mult cantitatea de informatie care a fost
generat de o surs. varianta semi-static utilizeaz algoritmul de construire a
arborelui de compresie prezentat anterior. Are ca dezavantaj faptul c sirul
simbolurilor generate de o surs de informatie trebuie parcurse de dou ori, o dat
pentru calcularea frecventelor necesare construirii arborelui si o dat pentru
codificarea sirului simbolurilor; n cazul n care simbolurile au aproximativ aceeasi
frecvent de aparitie, algoritmul nu ofer o compresie bun.
Parcurgerea de dou ori a sirului simbolurilor generate de o surs de
informatie este un incovenient deoarece acesta trebuie stocat, iar dimensiunea
datelor care trebuie comprimate, n zilele noastre, este foarte mare si calculatoarele
personale (de cele mai multe ori) nu detin resursele necesare stocrii datelor.
pentru varianta dinamic exist doi algoritmi performan- ti: FGK (Faller, Gallager,
Knuth) si V (Vitter). Acestia au n comun faptul c arborele se construieste dinamic
pe msur ce o surs de informatie genereaz simboluri, deci este necesar o
singur parcurgere a sirului simbolurilor si nu este necesar stocarea lor. Doar o
mic parte dintre ele sunt stocate cu scopul de a optimiza procesul de compresie.
Rata de compresie a acestor doi algoritmi variaz. n anumite cazuri rezultatele
7

obtinute sunt cu mult mai bune dect cele date de varianta static, dar n cazul cel
mai ru pentru varianta static, rezultatele variantelor dinamice sunt optime de cele
mai multe ori. Primele dou variante nu mai necesit explicatii suplimentare,
asadar, n continuare, vom prezenta n detaliu varianta dinamic FGK, varianta
dinamic Vitter fiind similara.

APLICATIE PRACTICA

Una dintre aplicatiile binecunoscute ale arborilor binari optimi o constituie


determinarea codurilor Huffman pentru caracterele unui sir de intrare
Aceste coduri vor putea fi apoi folosite pentru codificarea sirului pe un
numar de biti semnificativ mai mic decat initial
Daca pe post de sir de caractere este folosit un fisier, codurile Huffman pot
ajuta la compresia fisierului respectiv (reprezentarea continutului sau pe un
numar de biti mai mic decat in mod normal)
Daca pe post de sir de caractere este folosit un fisier, codurile Huffman pot
ajuta la compresia fisierului respectiv (reprezentarea continutului sau pe un
numar de biti mai mic decat in mod normal)
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
8

E apare de 3 ori
<blank> (spatiul) apare de 3 ori (pentru o mai mare claritate vom reprezenta
caracterul spatiu prin simbolul _)
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
Pentru fiecare caracter distinct vom construi un arbore binar optim avand un
singur nod

Asociem fiecarui nod frecventa de aparitie a cheii nodului respectiv


Ideea este de a reduce la fiecare pas numarul de arbori binari optimi prin
combinare, pana cand se ajunge la un singur arbore binar optim
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
9

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

_
3/2
0

3/2
0

Din cei 4 arbori ramasi, alegem 2 care au frecventele de aparitie minime


Acestia vor fi primul si al treilea si vor fi inlocuiti printr-un nou arbore
avand frecventa 8/20

10

Din cei 3 arbori ramasi, alegem 2 care au frecventele de aparitie minime


Acestia vor fi ultimii 2 si vor fi inlocuiti printr-un nou arbore avand
frecventa 12/20

Nu mai avem de ales, fiind doar 2 arbori


Acestia vor fi inlocuiti printr-un nou arbore avand frecventa 20/20

11

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

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
Astfel, vom avea:
M codul 00; A codul 10; R codul 01;

12

E codul 110; _ codul 111


In mod normal, un caracter din sir (sau din fisier, daca folosim un
fisier) se codifica pe 8 biti
In cazul de fata, tinand cont ca sunt numai 5 caractere in total, am putea
implementa foarte usor o codificare binara de 3 biti/caracter (2 biti ar asigura
doar 4 caractere distincte, dar noi avem 5)
Se observa ca aceste coduri 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
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
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%
13

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
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)
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:
cod(A) = 11 si cod(E) = 111
Atunci sirul initial AE ar fi fost codificat 11111 dar de decodificat
poate fi decodificat fie ca AE fie ca EA
Proprietatea de prefix (pe care am incalcat-o aici) nu ar fi dus la astfel de
ambiguitati .

14

BIBLIOGRAFIE

1. http://www.ginfo.ro/revista/13_1/serial.pdf
2. http://www.infoarena.ro/problema/huffman
3. http://telecom.etc.tuiasi.ro/pns/cc/lab_cc/L01_TCSM_Algoritmi%20de
%20compresie%20folositi%20in%20sistemele%20moderne%20de
%20arhivare_Codarea%20Huffman.pdf

4. http://www.math.uaic.ro/~volf/depozit/coduri.pdf

15

16

S-ar putea să vă placă și