Documente Academic
Documente Profesional
Documente Cultură
PROIECT
Student: Profesor:
An universitar
2016-2017
CUPRINS
1. INTRODUCERE................................................................................................................................. 3
4. CLASIFICARE ................................................................................................................................. 15
5. STATISTICI ...................................................................................................................................... 17
6. CONCLUZII ..................................................................................................................................... 20
7. BIBLIOGRAFIE ............................................................................................................................... 21
2
1. INTRODUCERE
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.
3
2. DESCRIERE ALGORITMI
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.
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.
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.
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
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.
XX 8/27
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.
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.
1. w <- nil
/W / 256 /W
E W 257 WE
D E 258 ED
10
/ D 259 D/
/ E 261 E/
/ B 265 B/
EOF 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/
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
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.
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.
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).
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
17
Dimensiuni fisiere
140000
120000
100000
80000
60000
40000
20000
0
1 2 3 4 5 6 7 8
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
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.
500000
400000
300000
200000
100000
0
1 2 3 4 5 6 7 8
19
6. CONCLUZII
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