Sunteți pe pagina 1din 21

UNIVERSITATEA DIN CRAIOVA

FACULTATEA DE AUTOMATICA, CALCULATOARE SI


ELECTRONICA

DEPARTAMENTUL DE CALCULATOARE SI TEHNOLOGIA


INFORMATIEI

MODELAREA SI EVALUAREA PERFORMANTELOR

PROIECT

EVALUAREA ALGORITMILOR DE COMPRIMARE


A DATELOR

Student: Profesor:

Cristian-Iulian Baciucu Prof. dr. ing. Mihai Mocanu

An universitar

2016-2017
CUPRINS
1. INTRODUCERE................................................................................................................................. 3

2. DESCRIERE ALGORITMI .............................................................................................................. 4

2.1 Run length encoding algorithm ..................................................................................................... 4

2.2 Huffman Encoding .......................................................................................................................... 5

2.3 Arithmetic Encoding ....................................................................................................................... 8

2.4 The Lempel Zev Welch Algorithm ................................................................................................ 9

3. FACTORI DE MASURARE A PERFORMANTEI ...................................................................... 14

3.1 Rata de compresie ......................................................................................................................... 14

3.2 Factorul de compresie................................................................................................................... 14

3.3 Procentul de compresie ................................................................................................................. 14

3.4 Timpul de comprimare/decomprimare ....................................................................................... 14

3.5 Timpul de distribuire .................................................................................................................... 14

4. CLASIFICARE ................................................................................................................................. 15

4.1 Algoritmi de securitate ................................................................................................................. 15

4.2 Algoritmi codificare in diverse formate ...................................................................................... 15

4.3 Algoritmi de asigurare a integritatii datelor .............................................................................. 15

5. STATISTICI ...................................................................................................................................... 17

6. CONCLUZII ..................................................................................................................................... 20

7. BIBLIOGRAFIE ............................................................................................................................... 21

2
1. INTRODUCERE

Comprimarea datelor reprezinta o functionalitate comuna si ceruta in cele mai multe


aplicatii. Exista un numar mare de algoritmi de comprimare datelor, cu scopul de a comprima
informatia din diferite formate. Inclusiv pentru acelasi timp de date, exista mai multi algoritmi,
care abordeaza problema in mod asemanator.

Utilizarea comprimarii datelor, duce la reducerea dimensiunii unui fisier. Este foarte
folositoare pentru procesare, stocare sau transmiterea informatiei in retea. Pentru transmiterea
datelor in retea, viteza de transmisie este principalul scop de obtinut. Aceasta se calculeaza in
functie de mai multi parametrii cum ar fi timpul folosit pentru codificare la sursa, timpul de
durata al transmiterii informatiei codificare in retea si timpul necesar pentru decodificarea
datelor primite la destinatar. Daca se foloseste pentru procesul de stocare a datelor, atunci
gradul de comprimare este principalul obiectiv.

Procedeul de decodificare poate fi ireversibil in cazul anumitor algoritmi. Majoritatea


merg pe directia ,,datele codificate trebuie sa fie aceleasi dupa un process de decodificare”. In
anumite cazuri se accepta pierderea anumitor informatii pentru imbunatatirea obiectivelor
anterioare. Tot acesti algoritmi pot fi folositi pentru securitate sau in combinatie cu algoritmii
pentru transmiterea datelor, asigurand calitatea transmiterii informatiei.

3
2. DESCRIERE ALGORITMI

In paginile urmatoare au fost descrisi cativa algoritmi pentru comprimarea datelor.

2.1 Run length encoding algorithm

Algoritmul Run - Length Encoding urmareste reducerea lungimii sirurilor de caractere care
se repeta. Un astfel de sir se numeste run si este comprimat pe doi octeti. Primul octet contine un
contor care arata de cite ori se repeta caracterul din run, iar cel de-al doilea octet contine valoarea
caracterului care se repeta. De exemplu, sirul AAAAAAAAAA se va comprima prin 10A. Cei doi
octeti formeaza un pachet comprimat al unui sir. Daca sirul mai contine si alte caractere, atunci
rezultatul comprimarii lui va fi format din mai multe pachete, fiecare dintre ele reprezentind cite
un run de o anumita lungime. Astfel, sirul AAAAAAAkkkkLLLLLLLLLLL va deveni 7A4k10L.

O varianta a acestui algoritm este folosita pentru comprimarea imaginilor PCX. Diferenta
intre varianta originala si cea folosita la fisierele PCX consta in semnificatia primului octet din
pachet. La fisierele PCX, unde caracterele sunt inlocuite cu valori ale culorilor, pot exista si valori
care nu se repeta, cu alte cuvinte avem un singur pixel de o anumita culoare pe linie. Daca pixelul
ar fi codificat dupa metoda descrisa mai sus, atunci in loc de un octet cat ar ocupa pixelul
necodificat, obtinem un pachet de doi octeti. Pentru a se evita acest lucru, primii doi biti ( cei mai
semnificativi ) ai primului octet vor juca rolul unui indicator ( flag ). Daca indicatorul are cei doi
biti pozitionati, este vorba de un pachet in care contorul este dat de urmatorii 6 biti din primul
octet, iar valoarea culorii de urmatorul octet. Daca bitii nu sunt pozitionati, atunci nu mai este
vorba de un pachet, ci de un pixel pe un octet. Numai daca pixelul are cei doi biti mai semnificativi
pozitionati, se mai codifica sub forma unui pachet in care contorul are valoarea 1.

Algoritmul RLE folosit nu este perfect, deoarece pentru pixeli singulari care au valoarea
pe un octet, iar cei doi biti mai semnificativi sint pozitionati, este nevoie de pachete de doi octeti
care dubleaza astfel lungimea. Astfel, la unele imagini mai complexe, lungimea fata de un fisier
BMP ar putea creste.

Algoritmul este urmatorul:

4
Algoritmul RLE este folosit inca din 1967 pentru transmiterea semnalelor in
televiziune. Este folosit si pentru anumite formate cum ar fi bitmap sau GIF.

2.2 Huffman Encoding

Acest algoritm se bazeaza pe crearea unor noi seturi de simboluri pentru cele existente
in sursa. Pentru inceput, se calculeaza numarul de aparitii ale fiecarui simbol din sursa pentru
a obtine frecventele de distributie ale acestora. In functie de probabilitati, simbolurile cu
frecventa cea mai mare, vor obtine codurile cele mai mici, iar cele cu frecventa cea mai mica,
coduri mari. Se va forma un arbore si prin parcurgerea acestuia in pre-ordine, se vor obtine
codificarile pentru fiecare simbol. Exista doua variante ale acestui algoritm:

- Static
- Adaptiv
Algoritmul static calculeaza mai intai frecventele si creaza un arbore comun pentru
codificare si decodificare. Informatiile din acest arbore trebuie sa existe deasemena in fisierul
comprimat.
Algoritmul adaptiv dezvolta arborele in timp ce calculeaza frecventele si vor exista doi
arbori pentru ambele procese.
Pentru algoritmul lui Huffman, rata de compresie depinde de numarul de simboluri
diferite. Cu cat sunt mai putine, cu atat compresia va fi mai buna.
Limbajul pseudocod pentru algoritmul Huffman este urmatorul:

Huffman ( C )

1. n <- | C |
2. Q <- C
3. for i <- 1 to n-1 do

5
4. z <- Aloca_nod ()
5. x <- left [ z ] <- Extrage_min ( Q )
6. y <- right [ z ] <- Extrage_min ( Q )
7. f [ z ] <- f [ x ] + f [ y ]
8. Insert ( Q,z )
9. return Extrage_min ( Q )
C reprezinta setul de n caractere, c este un caracter din C cu frecventa f [ c ]. Q este o coada
de prioritati bazata pe f, utilizata pentru a identifica doua obiecte cu cele mai mici frecvente din
care rezulta un obiect cu frecventa egala cu suma celor doua. Linia 2. initializeaza coada de
prioritati cu caracterele din C. Ciclul for din liniile 3-8 extrage din coada in mod repetat doua
noduri x si y cu cele mai mici frecvente si le inlocuieste in coada cu un nod nou z care reprezinta
fuziunea dintre x si y. Frecventa lui z este suma frecventelor lui x si y si se calculeaza in linia 7.
Nodul z are pe x ca fiu stang si pe y ca fiu drept. Ordinea este arbitrara. Dupa n-1 fuziuni singurul
nod ramas in coada este radacina arborelui si este returnat in linia 9.

In analiza timpului de lucru vom considera ca Q este implementata ca o movila binara.


Pentru setul C de n caractere, initializarea lui Q in linia 2 poate fi executata intr-un timp O ( n ).
Ciclul din liniile 3-8 se executa de n-1 ori si pentru ca fiecare operatie asupra movilei necesita un
timp de ordinul O ( lg n ), contribuie cu O ( n lg n ) la timpul de lucru. Deci timpul total de lucru
al algoritmului pentru un set de n caractere este O ( n lg n ).

Codurile Huffman sint foarte des utilizate si reprezinta o tehnica eficienta de compresie a
datelor. In functie de caracteristicile fisierului compresat, gradul de compresie este intre 20% si
90%. Algoritmul greedy pentru codificarea Huffman utilizeaza o tabela de frecvente de aparitie
pentru fiecare caracter, pentru a construi o modalitate optimala de reprezentare a fiecarui caracter
ca un sir binar.

Sa presupunem ca avem un fisier de date cu 100 000 de caractere. S-a observat ca aceste
caractere apar cu frecventele din figura de mai jos:

6
Exista mai multe feluri de reprezentare a unui astfel de fisier de date. Vom considera
problema proiectarii unui cod binar in care fiecare caracter este reprezentat printr-un sir binar unic.
Daca se utilizeaza un cod de lungime fixa, avem nevoie de trei biti pentru a reprezenta sase
caractere, si anume: a se poate codifica prin 000, b prin 001, s.a.m.d. Aceasta metoda necesita 300
000 de biti pentru a codifica tot fisierul.

Se pune intrebarea daca se poate mai bine. Raspunsul este ca un cod de lungime variabila
permite o mai buna codificare, prin asignarea unor coduri scurte caracterelor care apar frecvent si
coduri mai lungi celor mai putin frecvente. De exemplu, codificarea celor sase caractere se poate
face astfel:

100
0 1
a:45 55
0 1
25 30
0 1 0 1
c:12 b:13 14 d:16
0 1
f:5 e:9

a se codifica prin 0, si f prin 1100. Aceasta codificare necesita:

(45*1+13*3+12*3+16*3+9*4+5*4)*1 000=224 000 biti pentru a codifica fisierul, ceea ce


inseamna o economie de 24%. De fapt, asa cum se va vedea, este vorba despre o codificare
optimala a fisierului.

Algoritmul Huffman este folosit pentru a converti datele din anumite formate cum ar fi:
GZIP, PKZIP sau BZIP2 in formate de imagini precum PNG sau JPEG.

7
2.3 Arithmetic Encoding

La prima vedere ar parea ca metoda Huffman de codificare este perfecta. Dar, lucrurile nu
stau astfel. Aceasta metoda este optima numai atunci cand probabilitatile de aparitie ale
simbolurilor sunt puteri intregi ale lui 1 / 2. Tehnica de codificare aritmetica nu are aceasta
restrictie.

Codificarea aritmetica presupune reprezentarea unui sir de intrare cu ajutorul unui interval
de numere reale cuprinse intre 0 si 1. Pe masura ce mesajul de codificat devine mai lung, intervalul
care trebuie reprezentat devine din ce in ce mai mic, iar numarul de biti necesari pentru
reprezentarea intervalului creste. Simbolurile succesive din mesaj reduc acest interval in functie
de propabilitatile lor de aparitie.

8/9 YY Detail 31/32 .11111

Y YX too small 14/16 .1110

2/3 for text 6/8 .110

XY 16/27 XYY 10/16 .1010

4/9 XYX 4/8 .100

X XXY 3/8 .011

XX 8/27

0 XXX 1/4 .01

Sa consideram doua simboluri x si y cu probabilitatile de aparitie egale cu 0.66 si 0.33.


Pentru a codifica un mesaj se examineaza primul simbol: daca este x se alege partitia inferioara;
daca este y se alege partitia superioara. Continuand asemanator pentru trei simboluri, se vor obtine
codurile din partea dreapta a diagramei de mai sus. Ele se gasesc prin considerarea locatiei

8
corespunzatoare din interval pentru un set particular de simboluri si transformarea ei intr-o fractie
binara. In practica, este, de asemenea, necesar un simbol care sa marcheze sfarsitul sirului de date.

In exemplul de mai sus, codificarea aritmetica nu este complet eficienta datorita lungimii
mici a mesajului, dar cu mesaje lungi eficienta codificarii se apropie de 100%.

Codificarea aritmetica este o metoda relativ noua si nu foarte utilizata. Unul dintre motive
este acela ca necesita un volum mare de resurse atat din partea unitatii centrale cat si a memoriei.

Sa presupunem ca dorim sa codificam un mesaj de intrare avand m caractere si se dau


frecventele de aparitie pentru n caractere.

Algoritmul de codificarea aritmetica contine urmatorii pasi:

1. Intervalul [0,1] se divide in segmente corespunzatoare celor n simboluri. Segmentul


pentru fiecare simbol are o lungime proportionala cu probabilitatea sa.
2. Se alege segmentul pentru primul simbol din sir.
3. Se divide segmentul acestui simbol in noi n segmente cu lungimile proportionale cu
probabilitatile simbolurilor .
4. Din aceste noi segmente, se alege cel corespunzator urmatorului simbol din mesaj.
5. Se repeta pasii 3 si 4 pina cand se codifica intregul mesaj.
6. Se reprezinta valoarea segmentului printr-o fractie binara.
Timpul de lucru al algoritmului este O ( n*m ).

Sa presupunem urmatoarele caractere : A, E, O, I si U cu probabilitatile lor de aparitie :


0.12, 0.42, 0.30, 0.09, 0.07 si mesajul de codificat de forma IOUA.

Intervalul [0,1] se divide in 5 segmente. Lungimea segmentelor corespunde probabilitatii


de aparitie a fiecarui caracter. Se alege segmentul corespunzator primului caracter din sir, si anume
I. Intervalul corespunzator lui este [0.37, 0.46]. Acest interval este apoi divizat in 5 subintervale
cu lungimile proportionale cu probabilitatile de aparitie ale simbolurilor. In final, se ajunge la
intervalul [0.37797, 0.37819]. Orice valoare din acest interval poate codifica mesajul IOUA.
Fractia binara 0.011000001101 este in acest interval, deci mesajul IOUA poate fi codificat pe 12
biti. Pentru comparatie, codificarea Huffman necesita 13 biti pentru acelasi mesaj.

2.4 The Lempel Zev Welch Algorithm

9
Schemele bazate pe LZ78 lucreaza prin introducerea frazelor intr-un dictionar, iar apoi
cand se gaseste o noua aparitie a unei anumite fraze, se foloseste in locul frazei indexul ei din
dictionar. Exista mai multi algoritmi de compresie bazati pe acest principiu care difera in principal
prin maniera in care administreaza dictionarul. Cea mai cunoscuta schema este LZW ( Lempel -
Ziv - Welch ) proiectata de catre Terry Welch in 1984, implementata in hardware pentru a obtine
o performanta crescuta la controlerele de disc.

Algoritmul LZW incepe cu un dictionar de 4 KO, in care intrarile de la 0 la 255 se refera


la octeti individuali, iar cele de la 256 la 4095 se refera la subsiruri. De fiecare data cand se
genereaza un nou cod, inseamna ca a fost analizat un nou sir. Noile siruri sunt generate prin
adaugarea caracterului curent k la sfarsitul sirului existent w.

Algoritmul pentru compresia LZW este urmatorul:

1. w <- nil

2. while nu s-a intalnit sfarsit de fisier do


3. citeste caracterul k
4. if wk exista in dictionar then
5. w <- wk
6. else
7. scrie codul pentru w
8. adauga wk in dictionar
9. w <- k
10. end while

Input String = /WED/WE/WEE/WEB/WET

Character Input Code Output New code value New String

/W / 256 /W

E W 257 WE

D E 258 ED

10
/ D 259 D/

WE 256 260 /WE

/ E 261 E/

WEE 260 262 /WEE

/W 261 263 E/W

EB 257 264 WEB

/ B 265 B/

WET 260 266 /WET

EOF T

Algoritmul de decompresie LZW primeste la intrare sirul de coduri si il utilizeaza pentru a


recrea cu exactitate sirul initial. Ca si algoritmul de compresie, decompresia adauga un nou sir in
dictionar de fiecare data cand citeste un nou cod. In plus, trebuie sa traduca fiecare cod intr-un sir
si sa-l trimita la iesire.

Input Codes: / W E D 256 E 260 261 257 B 260 T

Input/ STRING/
OLD_CODE CHARACTER New table entry
NEW_CODE Output

/ / /

W / W W 256 = /W

E W E E 257 = WE

11
D E D D 258 = ED

256 D /W / 259 = D/

E 256 E E 260 = /WE

260 E /WE / 261 = E/

261 260 E/ E 262 = /WEE

257 261 WE W 263 = E/W

B 257 B B 264 = WEB

260 B /WE / 265 = B/

T 260 T T 266 = /WET

Cea mai importanta trasatura a acestui algoritm de compresie este aceea ca dictionarul nu
trebuie memorat, el se construieste in timpul decompresiei. La sfirsitul procesului de decodificare,
decodificatorul va avea un dictionar identic cu cel creat la compresie construit in timpul procesului
de decodificare.

Algoritmul LZW este foarte des intalnit si in varianta LZC, dupa ce a fost utilizat in
programul de compresie Unix. In aceasta varianta, pointerii au lungime fixa. Ei incep cu o lungime
de 9 biti si apoi cresc incet la lungimea maxima posibila din momentul in care au fost utilizati toti
pointerii de o anumita lungime. Mai mult, dictionarul nu este inghetat ca in algoritmul LZW,
programul monitorizeaza continuu performanta compresiei si din momentul in care incepe sa scada
, dictionarul este distrus si reconstruit. Cele mai recente scheme inlatura din dictionar frazele cele
mai putin utilizate, din momentul in care dictionarul incepe sa se umple.

Exista, de asemenea, scheme care nu construiesc dictionarul prin adaugarea unui singur
caracter nou la sfirsitul frazei curente. O tehnica alternativa este aceea de a concatena cele doua

12
fraze anterioare ( LZMW ) si permite o constructie mai rapida a frazelor lungi. Dezavantajul acestei
metode este acela ca necesita o structura de date mai sofisticata pentru a gestiona dictionarul.

LZW poate fi folosit pentru pentru anumite formate de fisiere: TIFF, JPEG, PDF.

13
3. FACTORI DE MASURARE A PERFORMANTEI
3.1 Rata de compresie

Reprezinta raportul dintre dimensiunea fisierului dupa compresie si dimensiunea sa


inainte de compresie.

3.2 Factorul de compresie

Este inversul ratei de compresie.

3.3 Procentul de compresie

Calculeaza contractia fisierului sursa ca procentaj. Reprezinta diferenta dintre


dimensiunile fisierului inainte si dupa comprimare raportate la dimensiunea fisierului inainte
de comprimare.

3.4 Timpul de comprimare/decomprimare

Timpul pentru comprimare si decomprimare ar trebui sa fie luate in considerare separat.


Pentru unele aplicatii, doar timpul de decomprimare este important cum ar fi cele pentru
formate video. Pentru altele ambele procese sunt la fel de importante. In majoritatea cazurilor,
acesti timpi depind si de puterea de calcul a masini pe care sunt executati algoritmii.

3.5 Timpul de distribuire

Ia in considerare timpii de comprimare si decomprimare ale unei surse impreuna cu


timpul de transmitere a mesajului codificat printr-o retea.

14
4. CLASIFICARE

Algoritmii prezentati anterior fac parte din categoria celor pentru reducerea spatiului
de stocare si a reducerii informatiei ce se transmite prin retea. Pe langa aceasta mai exista si
alte categorii. Comprimarea nu inseamna neaparat cazul prezentat anterior ci si o posibilitate
de securizare a informatiei. Comprimarea nu asigura ca datele codificate, vor avea o
dimensiune mai redusa fata de cele initiale.

Alte categorii pentru comprimarea datelor sunt:

4.1 Algoritmi de securitate

Sunt folositi pentru criptarea informatiei, deobicei pentru transmiterea acesteia in retea.
Printre acestia se enumera RSA si AES. In unele cazuri, informatia ce urmeaza a fi transmisa,
este codificata prin intermediul unui dintre algoritmii de stocare si apoi criptata cu un astfel de
algoritm de securitate. Viteza de codificare si decodificare, nu va mai fi la fel de mare, insa se
prefera acesti timpi pierduti, in avantajul asigurarii ca informatia nu poate fi decriptata de vreun
atacator cibernetic.

4.2 Algoritmi codificare in diverse formate

Dupa cum s-a precizat, algoritmii nu au rolul doar de a reduce spatiu de stocare, ci si
de a reprezenta informatia intr-un alt mod. In aceasta categorie intra algoritmii convertire a
datelor in diverse formate. Unii dintre ei au si rolul de a reduce spatiul de stocare, dar cu
pierderea calitatii informatiei curente. De exemplu, la filmele de pe dvd-uri, este transmis
fiecare al 4-lea pixel. Restul sunt calculati prin diversi algoritmi cum ar fi cei de interpolare.
JPEG este un alt format de imagini, unde calitatea este pierduta tot in urma unui procedeu ca
al filmelor de pe dvd. Unii algoritmi au rolul de a converti un format intr-un alt format. Pentru
device-urile mobile, chiar si in prezent, vizualizarea fisierelor in format video, reprezinta o
problema. Majoritatea player-elor accepta doar anumite formate. In astfel de situatii, fisierul
in formatul prezent pe sursa(AVI) va trebui convertit in cel acceptat de destinatar(MP4).

4.3 Algoritmi de asigurare a integritatii datelor

15
Pe langa aceasta calitate, ei pot fi folositi si in cadrul algoritmilor de securitate, in
special pentru stocarea informatiei, nu pentru transmiterea in retea. Rolul lor este acela de a
transforma un set de date intr-un hash codificat. Unii dintre ei nu detin vreo modalitate de
readucere a informatiei la formatul initial. In cazul transmiterii datelor sub forma de pachete,
pe baza informatiei detinute de fiecare pachet, se va genera cate un hash specific, care va fi
transmis la randul sau odata cu pachetul. La destinatie, pentru fiecare pachet primit, se va
genera cate un hash folosind acelasi algoritm si se va compara cu cel primit din retea. In caz
de neconcordanta, se va retrimite un mesaj sursei prin care va fi notificata de pachetul transmis
gresit, iar acesta va fi retrimis. Din aceasta categorii fac parte SHA-256, MD-5.

16
5. STATISTICI

Pentru anumiti algoritmi s-au luat cateva masuratori pe baza anumitor fisiere,
dimensiunile lor fiind prezentate in tabelul de mai jos:

Nr. Dimensiune
initiala fisier

1. 11252

2. 15370

3. 22094

4. 39494

5. 44355

6. 71575

7. 78144

8. 118223

In urma procesului de comprimare, noile dimenisiuni ale fisierelor sunt date de


urmatorul grafic. Se observa fisierele rezultate in urma comprimarii cu algoritmul RLE, au cam
aceeasi dimensiune ca fisierele originale. Nu s-a obtinut vreun mare progres folosind acest
algoritm. Diferenta este data de catre algoritmii LZW si Huffman. Pentru dimensiuni reduse
ale fisierelor, acestea ofera cam aceeasi performanta, dar sub limitele oferite de algoritmul
RLE. Diferenta este observata odata cu cresterea dimensiunii fisierului. In acest caz, algoritmul
LZW ofera cea mai buna rata de compresie.

17
Dimensiuni fisiere
140000

120000

100000

80000

60000

40000

20000

0
1 2 3 4 5 6 7 8

Dimensiune initiala fisier RLE LZW Huffman

Dintr-un alt grafic, rezulta rata de comprimare a fisierului initial. Fata de graficul
anterior, din acesta se observa ca in anumite locuri, dimensiunea fisierului comprimat cu
algoritmul RLE, este mai mare decat cea initiala. S-a discutat in cadrul acestui referat ca
procesul de codificare, nu inseamna neaparat obtinerea unui fisier mai redus decat cel initial,
insa aici nu este vorba de algoritmi cu proprietatea de a converti un format in alt format, ci
despre algoritmi de arhivare. In cazul acesta algoritmul RLE, incalca principiile procesului de
arhivare. Ceilalti 2 algoritmi obtin rezultate destul de indepartate fata de algoritmul precedent.
Pentru aceleasi masuratori s-au obtinut urmatoarele rezultate:

Rata de comprimare
120

100

80

60

40

20

0
1 2 3 4 5 6 7 8

RLE LZW Huffman

18
Timpul de comprimare nu este dat numai de dimensiunea fisierului, ci si de continutul
sau. De exemplu pentru algoritmul Huffman, daca fisierul contine doar un singur simbol, dar
de n ori, timpul va consta in mare parte cu parcurgerea fisierului pentru numararea aparitiei
fiecarui caracter, in cazul acesta fiind unul singur. Algoritmul RLE ofera cel mai bun timp
pentru comprimarea datelor, insa daca este sa ne raportam la rezultatele obtinute, nu se merita
folosirea acestui algoritm. In mare parte, timpul este liniar indiferent de numarul de caractere.
Pentru ceilalti algoritmi, cu cat creste dimensiunea fisierului, cu atat timpul de executie devine
exponential.

Timpul de comprimare (ms)


600000

500000

400000

300000

200000

100000

0
1 2 3 4 5 6 7 8

RLE LZW Huffman

19
6. CONCLUZII

Dupa cum reiese, comprimarea datelor nu inseamna neaparat reducerea spatiului de


stocare. Se observa intr-o anumita masura ca algoritmul RLE incalca aceasta regula. Pentru
algoritmul SHA 256, daca se introduce un text mai mic decat dimensiunea hash-ului, cum ar
fi o parola de utilizator, nu se va castiga nimic din punct de vedere al stocarii. In schimb se va
obtine un rezultat bun pentru pastrarea datelor in siguranta, algoritmul neavand vreo modalitate
de readuce informatia la forma initiala.

In anumite situatii nu se stie care metoda trebuie abordata si astfel se ajunge la timpi
mai mari de executie decat in cazul normal. De exemplu, comprimarea datelor este folosita si
pentru a reduce timpul de transmitere a datelor in retea. Daca masinile de pe care se opereaza
nu detin o suficienta putere de calcul, suma timpilor de comprimare la sursa, decomprimarea
la destinatie si cel de propagare prin retea s-ar putea sa fie mai mare decat daca datele ar fi
transmise fara a folosi vreun algoritm de comprimare.

Pentru algoritmi precum Huffman sau LZW, puterea de calcul trebuie sa fie foarte
mare. Timpul de executie creste exponential odata cu dimensiunea fisierului. Pentru acesti
algoritmi, mediul de lucru este destul de dificil de gasit pentru utilizatorii de rand. Majoritatea
nu detin o masina de calcul de mare putere, ci un simplu dispozitiv. Astfel, acesti algoritmi
trebuie folositi in functie de situatia in care ne aflam.

20
7. BIBLIOGRAFIE
I. https://gist.github.com/lsauer/3744846
II. https://code.msdn.microsoft.com/windowsapps/LZW-Compressor-and-2cb0600b
III. http://snipd.net/huffman-coding-in-c
IV. https://en.wikipedia.org/wiki/Huffman_coding
V. https://www.siggraph.org/education/materials/HyperGraph/video/mpeg/mpegfaq/huff
man_tutorial.html
VI. https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch
VII. https://www.prepressure.com/library/compression-algorithm/lzw
VIII. https://en.wikipedia.org/wiki/Arithmetic_coding
IX. https://web.stanford.edu/class/ee398a/handouts/papers/WittenACM87ArithmCoding.
pdf
X. https://en.wikipedia.org/wiki/Run-length_encoding
XI. https://www.tbs-certificates.co.uk/FAQ/en/sha256.html
XII. https://ro.wikipedia.org/wiki/MD5

21

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