Sunteți pe pagina 1din 79

ANALIZA ALGORITMILOR PENTRU COMPRESIA

INFORMAIEI TEXTUALE
I A EFICIENEI PROGRAMELOR DE ARHIVARE
CUPRINS
ABREVIERI........................................................................................................................................3
LISTA TABELELOR I GRAFICELOR............................................................................................4
ADNOTARE........................................................................................................................................6
CUVINTE-CHEIE...............................................................................................................................6
INTRODUCERE.................................................................................................................................8
CAPITOLUL 1. METODE DE COMPRESIE..................................................................................10
1.2. ALGORITMI ENTROPICI.....................................................................................................13
1.2.1. CODAREA BINAR HUFFMAN STATIC................................................................15
1.2.2. CODAREA BINAR SHANNON FANO...................................................................17
1.2.3. CODAREA BINAR HUFFMAN DINAMIC (ADAPTIV)....................................19
1.2.4. COMPRESIA ARITMETIC..........................................................................................20
1.3. ALGORITMI PE BAZ DE DICIONAR............................................................................26
1.3.1. ALGORITMUL LZ77 .....................................................................................................29
1.3.2. ALGORITMUL LZ78 .....................................................................................................32
1.3.3. ALGORITMUL LZW......................................................................................................34
CAPITOLUL 2. COMPRESIA FIIERELOR DE UZ GENERAL..................................................38
2.1 WinRAR...................................................................................................................................38
2.2 WinZIP.....................................................................................................................................39
2.3. 7-Zip FILE MANAGER..........................................................................................................40
2.3.1. ZIP....................................................................................................................................41
2.3.2. FORMATUL 7z ..............................................................................................................41
2.3.3. LZMA...............................................................................................................................42
2.4. POWER ARCHIVER 2009.....................................................................................................43
2.5. COMPARAREA EFICIENEI PROGRAMELOR DE ARHIVARE....................................43
CAPITOLUL 3. COMPRESIA FIIERELOR DIGITIZATE...........................................................44
3.1. COLECIILE DIGITALE O NOU POSIBILITATE DE ACCES LA INFORMAIE...44
3.2. FORMATELE UZUALE ALE FIIERELOR SCANATE ...................................................48
3.3. DjVu: UN SISTEM DE COMPRESIE TIP IMAGINE PENTRU DISTRIBUIREA
DOCUMENTELOR NUMERICE ................................................................................................49
3.4. EFICIENA TEHNICII DE COMPRESIEI DjVu.................................................................53
3.4.1. REZULTATE: IW44 PENTRU IMAGINI NATURALE...............................................55
3.4.2. REZULTATE: JB2 PENTRU IMAGINI N DOU NUANE......................................55
3.4.3. REZULTATE: DjVu PENTRU DOCUMENTELE COLOR..........................................57
CAPITOLUL 4. IMPLEMENTRI PRACTICE..............................................................................59
4.1. ALGORITMUL HUFFMAN STATIC (ALGORITM ENTROPIC)......................................59
4.1.1. CODUL SURS AL ALGORITMULUI HUFFMAN N VISUAL C++ ......................60
4.2. ALGORITMUL LZW (ALGORITM PE BAZ DE DICIONAR).....................................65
4.2.1. CODUL SURS AL ALGORITMULUI LZW N VISUAL C++..................................66
CONCLUZIE.....................................................................................................................................75
BIBLIOGRAFIE................................................................................................................................78
2
ABREVIERI
ACM Association for Computing Machinery
ACRL Association of College & Research Libraries
ALA American Library Association
BMP Windows bitmap
CD-ROM Compact Disk read-only memory
CNI Coalition for Networked Information
DARPA Defence Advanced Research Projects Agency
DjVu dj vu format
DLF Digital Library Federation
DLI Digital Library Initiatives
dpi dots per inch
EBCOT Embedded Block Coding with Optimal Truncation
EZW Embedded Zerotree Wavelet
GIF Graphics Interchange Format
GPL General Public License
IEEE Institute of Electrical and Electronics Engineers
IFLA International Federation of Library Associations
IW44 Wavelet based compression algorithm
JB2 bi-level image compression algorithm
JBIG Joint Bi-level Image Experts Group
JISC Joint Information Systems Committee, U.K
JPEG Joint Photographic Experts Group
LZW Lempel-Ziv-Welch
MMR MinMin-Roughness algorithm
MMR Modified Modified READ (READ is Relative Element Address Designate codes)
NASA National Aeronautics and Space Administration
NSF National Science Foundation, U.S
ODLIS Online Dictionary for Library and Information Science
PDF Portable Document Format
RGB Modelul de culori Red-Green-Blue
SPIHT Set Partitioning in Hierarchical Trees
TIFF Tagged Image File Format
WDL World Digital Library
3
LISTA TABELELOR I GRAFICELOR
Figura 1.1.1. Structura compresiei statice fr pierdere de informaie..............................................12
Figura 1.1.2. Structura compresiei adaptive fr pierdere de informaie (lossless compression)......12
Figura 1.2.1.1. Procedeul de codare Huffman....................................................................................17
Figura 1.2.2.1. Procedeul de codare Shannon Fano.......................................................................19
Figura 1.2.4.1. Procesul de codificare aritmetic..............................................................................23
Figura 1.2.4.2. Procesul de decodificare aritmetic ..........................................................................24
Tabelul 1.3.1. Formarea dicionarului...............................................................................................27
Tabelul 1.3.2. Cele mai frecvente 30 de perechi de caractere dintr-un document de 41.364 caractere
............................................................................................................................................................28
Tabelul 1.3.3. Cele mai frecvente 30 de perechi de caractere dintr-un program C de 65.983 caractere
............................................................................................................................................................28
Figura 1.3.1.1. Procedeul codrii algoritmului LZ77.......................................................................30
Figura 1.3.1.2. Poziionarea iniial a secvenei n fereastr pentru LZ77.......................................30
Figura 1.3.1.3. Deplasarea ferestrei cu o poziie pentru cutarea unei asemnri.............................31
Figura 1.3.1.4. Deplasarea ferestrei cu l+1 poziii pentru cutarea unei noi asemnri.....................31
Figura 1.3.1.5. Decodarea primului triplet ........................................................................................31
Figura 1.3.1.6. Decodarea celui de-al doilea triplet ..........................................................................31
Figura 1.3.1.7. Decodarea ultimului triplet .......................................................................................32
Figura 1.3.2.1. Procedeul codrii algoritmului LZ78.........................................................................33
Tabelul 1.3.2.1. Formarea dicionarului aplicnd algoritmul LZ78 ..................................................33
Tabelul 1.3.3.1. Exemplu de dicionar iniial pentru codarea LWZ...................................................35
Tabelul 1.3.3.2. Exemplu de dicionar complet pentru codarea LZW...............................................35
Tabelul 1.3.3.3. Procedeul de decodare LZW....................................................................................36
Tabelul 1.3.3.4. Exemplu de codare LZW [11]..................................................................................36
Tabelul 2.3.1. Formatele suportate (compatibile) ale aplicaiei 7-ZIP...............................................40
Tabelul 2.3.2.1. Metodele integrate curent n 7z................................................................................42
Tabelul 2.5.1. Compararea eficienei programelor de arhivare..........................................................43
Figura 3.3.1. Divizarea prim-plan/fundal [2].....................................................................................50
Figura 3.3.1.1. Proieciile succesive converg ctre un punct de intersecie a dou subspaii convexe
reprezentnd (a) imagini de potrivire a imaginii iniiale n afara mtii, i (b) imagini ale cror
coeficieni mascai wavelet sunt zero.................................................................................................52
Figura 3.4. Descrcarea fiierului printr-un modem de 56 K: decompresia progresiv mai nti a
textului, apoi a fundalului cu o cretere continu a calitii [2].........................................................54
4
Tabelul 3.4.1.1. Raportul semnal/zgomot obinut cu diferite metode de compresie..........................55
Tabelul 3.4.2.1. Comparaii ntre MMR/G4 i JB2 dup mrimea fiierelor.....................................56
Tabelul 3.4.2.2. Comparaii ntre MMR/G4 i JB2 dup rata de compresie......................................56
Tabelul 3.4.2.3. Rata de compresie a JB2 n raport cu rata de compresie relativ a G4...................56
Tabelul 3.4.2.4. Comparaii ntre MMR/G4 i JB2 dup mrimea medie a unei pagini....................57
Tabelul 3.4.3.1. Mrimea fiierelor (n KB) obinute la digitizare utiliznd diferii algoritmi .........57
Tabelul 3.4.3.2. Rezultatele compresiei utiliznd diferii algoritmi [2].............................................57

5
ADNOTARE
Compresia datelor se ocup cu reprezentarea informaiei ntr-o form compact. Acest lucru se
realizeaz prin identificarea i extragerea redundanei din date.
Modelarea statistic a unei surse discrete de informaie const n asocierea unei probabiliti de
apariie a fiecrui simbol al alfabetului sursei urmat apoi de atribuirea de cuvinte de cod cu un
numr mai mic de bii cuvintelor cu o probabilitate de apariie mai mare. Din aceast categorie fac
parte codificarea Shannon-Fano, codificarea Huffman static i dinamic, codificarea aritmetic.
Aceti algoritmi sunt descrii n capitolul 1.
Metodele de compresie bazate pe modelarea lingvistic a surselor discrete au la baz ideea de a
construi un dicionar din cuvinte ale limbajului asociat sursei. Ulterior inserrii unui cuvnt n
dicionar n cazul oricrei apariii a cuvntului acesta se nlocuiete cu o informaie despre poziia sa
n dicionar. Din aceast categorie fac parte algoritmii LZ77, LZ78, LZW, o descriere mai detaliat
este n capitolul 1 al tezei date.
Un compresor de date este o aplicaie care, pe baza unuia sau mai multor algoritmi de
compresie, diminueaz spaiul necesar stocrii informaiei utile coninute de un anumit set de date.
Pentru orice compresor de date este necesar condiia de existen a cel puin unui decompresor
care, pe baza informaiilor furnizate de compresor, s poat reconstitui informaia care a fost
comprimat. n cazul n care nu exist un decompresor, atunci datele comprimate devin inutile
pentru utilizator deoarece acesta nu mai are acces la informaia stocat n arhiv (o arhiv
reprezint rezultatul obinut n urma utilizrii unui compresor). Aplicaiile de arhivare de uz general
sunt tratate n capitolul 2.
Apariia necesitii digitizrii publicaiilor de patrimoniu, a manuscriselor etc. impune crearea
unei tehnici de compresie pentru fiierele scanate. Stocarea acestor fiiere n format DjVu care n
acest moment permite cel mai bun raport de compresie/calitate a fiierului standard este o
posibilitate analizat n aceast lucrare n capitolul 3.
Ultimul capitol conine implementrile practice ale algoritmilor Huffman static i LZW.
CUVINTE-CHEIE
Compresia datelor, algoritmi, codare static, codare adaptiv, Huffman, Shannon-Fano, tehnici
de dicionar, LZW, arhivatori, DjVu.
6
ABSTRACT
Data compression deals with the representation of information in a compact form. This is
achieved by identifying and extracting the redundancy from the data.
Statistical modelling of discrete sources of information is a combination of probabilities of each
symbol of the source alphabet followed by assigning code words with a fewer bits to the words with
a higher probability of occurrence. In this category is included Shannon-Fano coding, static and
dynamic Huffman coding, arithmetic coding. These algorithms are described in the Chapter 1.
Compression methods based on language modelling of discrete sources based on the idea of
building a dictionary of words associated with the source language. Subsequently inserting a word
in the dictionary for any occurrences of this word is replaced with information about its position in
the dictionary. In this category take part algorithms like LZ77, LZ78, LZW, a more detailed
description is in the Chapter 1 of this thesis.
A data compression is an application which on the basis of one or several compression
algorithms reduces storage space needed useful information contained in a data set. For any data
compression is necessary condition of existence of at least one decompresor, on the basis of
information supplied by the compressor can reconstruct information that has been compressed. If
there is no a decompresor, then compressed data become unnecessary for the user because this has
no access to the information stored in the archive (an archive is the result of the using a
compressor). Archiving applications of general using are treated in the Chapter 2.
The appearance of the necessity to digitize the patrimony publications, manuscripts, etc. it
requires the creation of a compression technique for the scanned files. Storing these files in DjVu
format that currently allows as the best report compression / quality of the standard file is a
possibility examined in the chapter 3 of this thesis.
The final chapter contains practical implementations of the static Huffman and LZW
algorithms.
KEYWORDS
Data compression, algorithms, static coding, adaptive coding, Huffman, Shannon-Fano,
dictionary techniques, LZW, archivers, DjVu.
7
INTRODUCERE
Compresia de date este ansamblul prelucrrilor ce se aplic unor date n scopul reducerii
dimensiunii reprezentrii acestora fr a pierde informaie important. Diminuarea poate fi obinut
fie prin aplicarea unui algoritm fr pierdere, n acest caz datele originale sunt reobinute la
decompresie, fie prin aplicarea unui algoritm cu pierdere, n acest caz datele recuperate dup
compresie reprezint o reconstruire satisfctoare a datelor originale. Reducerea volumului de date
permite stocarea mai multor informaii pe un singur produs media, sau ia mai puin timp pentru a le
transfera n reea. n unele cazuri, volumul de date este prea mare, nct aproape e imposibil de
prelucrat i reprezentat fr a le compresa.
Compresia informaiei textuale necesit algoritmi fr pierdere, deoarece se schimb sensul
informaiei. Dac la compresia sunetelor, imaginilor, secvenelor video se admit careva pierderi de
informaie, uneori chiar se cere suprimarea datelor ce nu pot fi percepute de om i se ajunge la un
raport de compresie de 50:1, n ceea ce privete compresia unui text se poate obine un raport de
aproximativ 2:1.
Raportul de compresie este egal cu raportul dintre dimensiunea reprezentrii datelor n lipsa
compresiei i dimensiunea reprezentrii datelor obinute n urma ei.
Sunt multe tehnologii de compresie a informaiei textuale, dar trebuie de inut cont c trebuie de
reconstruit aceasta informaie, cci altfel nu au nici o valoare datele comprimate. Iar faptul c
datele trebuie recuperate 100% face dificil aceast misiune.
Codul Morse o metod veche de compresie nu este utilizat n prezent dect n situaii foarte
rare, telegramele sunt neglijate odat cu venirea mesajelor electronice i a Internetului. Rutele
potale sunt nlocuite cu legturi prin satelit de mare debit, cu o cretere a criptrii. Chiar i tipul
mesajelor s-a schimbat. De la scrisori oficiale telegrafice noi am trecut la o comunicare mai bogat:
documente, texte, imagini, sunet, muzic i video. Apariia Internetului i n general a sistemelor
multimedia a transformat enorm modul nostru de comunicare. Noi trim ntr-o societate numeric.
Noi comunicm utiliznd telefoane mobile numerice, noi trimitem mesaje prin pota electronic.
Noi putem citi o carte care se afl ntr-o bibliotec la cellalt capt al lumii vizitnd site-ul ei web
(bibliotec virtual). Putem s avem o colecie respectabil de cri stocat pe un USB flash de
mrimea unei brichete.
Nu este necesar de a relata despre modul n care tehnologiile informaionale transform modul
nostru de a tri, de a aborda relaiile interpersonale, voi insista doar asupra faptului c aceste
transformri sunt rezultatul reuitelor tehnologice bazate pe schimbul eficace al informaiei. Acest
schimb nu poate avea loc dac utilizm date n forma lor brut. De fapt, toate aceste date, care sunt
la baza revoluiei numerice, sunt n stare brut, prea voluminoase pentru a fi prelucrate aa cum sunt
8
ele, cu toate c tehnologiile de stocare i de telecomunicaie s-au ameliorat foarte mult. Pentru a nu
ncrca reelele, trebuie s comprimm imaginile, sunetul i video ntr-un mod eficace.
E tiut faptul c i codurile s-au schimbat. Nu mai utilizm punctele, liniile i pauzele codului
Morse, noi manipulm bitul. n prezent codurile noi sunt elaborate cu ajutorul biilor. Un bit este
unitatea de baz a informaiei.
Majoritatea imaginilor, n stare necompresat au mrimea de sute de kilo-octei, uneori chiar i
zeci de mega-octei. O pies muzical numeric de calitate compact-disc, cntrete zeci de
mega-octei. Video de calitate medie, msoar sute de mega-octei pe minut. Chiar i o simpl
conversaie telefonic, utiliznd aceeai band a sistemelor telefonice actuale, cere aproximativ 8
kilo-octei pe secund, pentru a fi de calitate satisfctoare.
n lucrarea dat sunt analizai doar algoritmii de compresie textual, motivaia fiind specialitatea
finisat: Informatic i Limbi Moderne Aplicate (Licena n Informatic - 4 ani), ce presupune
cunotine practice ample despre prelucrarea textelor.
Metodele de compresie sunt desfurate n primul capitol, este dat cte un exemplu pentru o
nelegere mai sigur a materialului expus. Capitolul II conine informaii despre programele de
arhivare, compatibilitatea lor cu SO, eficiena compresiei obinut.
n urmtorul capitol sunt descrise succint tendinele internaionale n ceea ce privete crearea
bibliotecilor digitale ce rspund cerinelor de informare ale utilizatorilor secolului XXI. Sunt
prezentate cele dou componente din care se constituie bibliotecile digitale: coleciile digitale
obinute prin digitizarea motenirii culturale i tiinifice a omenirii pentru extinderea accesului la
aceasta i coleciile digitale create direct n format electronic, n special n universiti, cu scopul de
oferi accesul rapid la informaia academic, tiinific, educaional.
Capitolul III conine informaie i despre formatul DjVu utilizat pentru crile digitale stocate n
biblioteci virtuale.
Ultimul capitol conine rezultatele implementrilor practice ale algoritmilor Huffman (algoritm
entropic) i LZW (bazat pe dicionar) ct i explicarea codului surs elaborat n C++.
9
CAPITOLUL 1. METODE DE COMPRESIE
1.1. CONCEPTE GENERALE DESPRE COMPRESIA DATELOR
Noiunea de comprimare a datelor a aprut din necesitatea evident de a atinge rate mari de
transfer n reele sau de a stoca o cantitate ct mai mare de informaii folosind ct mai puin spaiu.
Compresia datelor este necesar n zilele noastre i este foarte des folosit, mai ales n domeniul
aplicaiilor multimedia.
Un compresor de date este o aplicaie care, pe baza unuia sau mai multor algoritmi de
compresie, diminueaz spaiul necesar stocrii informaiei utile coninute de un anumit set de date.
Pentru orice compresor de date este necesar condiia de existen a cel puin unui decompresor
care, pe baza informaiilor furnizate de compresor, s poat reconstitui informaia care a fost
comprimat. n cazul n care nu exist un decompresor, atunci datele comprimate devin inutile
pentru utilizator deoarece acesta nu mai are acces la informaia stocat n arhiv (o arhiv
reprezint rezultatul obinut n urma utilizrii unui compresor).
Un compresor de date este format din urmtoarele elemente:
- una sau mai multe surse de informaie;
- unul sau mai muli algoritmi de compresie;
- una sau mai multe transformri.
Sursa de informaie pentru un compresor poate fi constituit de unul sau mai multe fiiere sau
de un flux de date care a fost transmis compresorului prin intermediul unei reele. Datele arhivate
urmeaz s fie stocate ntr-o arhiv care urmeaz s fie pstrat local sau urmeaz s fie transmis
mai departe.
Exist dou categorii principale de algoritmi pentru compresia datelor:
1. algoritmi de compresie fr pierderi de date
1.1. algoritmi entropici de compresie a datelor (algoritmi care elimin redundana din cadrul
seturilor de date):
- algoritmul Huffman
- algoritmul Shannon-Fano
- algoritmi de compresie aritmetic (acesta este cel mai performant algoritm entropic
cunoscut).
1.2. algoritmi bazai pe dicionare
- Lempel Ziff 77 (LZ77), Lempel Ziff 78 (LZ78)
- variante ale algoritmilor din categoria LZ
1.3. transformri fr pierderi de date
- Run Length Encoding (RLE)
10
- Burrow-Wheeler Transform (BWT)
- transformarea delta
2. algoritmi de compresie cu pierderi de date
2.1. algoritmi folosii pentru compresia audio care se bazeaz pe proprietile undelor sonore i
perceperea lor de ctre om;
2.2. algoritmi utilizai pentru compresia imaginilor digitale;
2.3. algoritmi utilizai pentru compresia datelor video.
Algoritmii de compresie aparinnd celei de-a doua clase (cea cu pierderi de date) se folosesc
mpreun cu cei din prima pentru atingerea unor rate mari de compresie [14].
Metodele de compresie text pot fi mprite n doua categorii: statistice i ne-statistice.
Metodele statistice utilizeaz un model probabilistic al sursei de informaie. Astfel de coduri sunt
Shannon-Fano sau Huffman. Metodele ne-statistice utilizeaz alte principii de codare cum sunt cele
bazate pe dicionare, deci nu folosesc probabilitile simbolurilor.
In cazul metodelor statistice, un punct important n compresia datelor fr pierdere de
informaie este dat de posibilitatea organizrii/descompunerii compresiei n dou funcii: modelare
i codificare. Metoda statistic are la baz folosirea probabilitilor simbolurilor n stabilirea
cuvintelor de cod. Daca modelul sursei este stabilit naintea etapei de codare, i rmne neschimbat
n timpul codrii, metoda de compresie este una static. Algoritmul de compresie este unul
mecanic prin nlocuirea fiecrui simbol la sursei cu cuvntul de cod corespunztor, i transmiterea
acestuia pe canal. Metodele statice presupun transmiterea pe canal a informaiilor despre modelului
sursei i/sau a codului folosit, astfel nct decodorul s poate efectua operaia de decodare. Canalul
de comunicaie se considera fr erori.
O metod static este aceea n care transformarea mulimii mesajelor n cuvinte de cod este
fixat nainte de nceperea transmisiei, astfel nct un mesaj dat este reprezentat prin acelai cuvnt
de cod de fiecare data cnd apare n mesajul global. Un exemplu de codare static, bazat de
cuvinte de cod, este codarea Huffman (static). Aici asignarea cuvintelor la mesajele sursei este
bazat pe probabilitile cu care mesajele sursei apar n mesajul global. Mesajele care apar mai
frecvent sunt reprezentate prin cuvinte de cod mai scurte; mesajele cu probabiliti mici sunt
reprezentate de cuvinte de cod mai lungi.
La fiecare pas de codare este necesar s se estimeze probabilitile de utilizare a simbolurilor
sursei. Codorul preia distribuia de probabilitate i stabilete codul folosit pentru compresie. Se
estimeaz probabilitile de utilizare a simbolurilor sursei. Codorul preia distribuia de probabilitate
i stabilete codul folosit pentru compresie.
11
Figura 1.1.1. Structura compresiei statice fr pierdere de informaie
Figura 1.1.2. Structura compresiei adaptive fr pierdere de informaie (lossless compression)
Un cod este dinamic (dynamic) dac codarea mulimii mesajelor sursei primare se schimb n
timp. De exemplu, codarea Huffman dinamic presupune estimarea probabilitilor de apariie n
timpul codrii, n timp ce mesajul este procesat. Asignarea cuvintelor de cod mesajului de transmis
(de codificat) se bazeaz pe frecvenele de apariie la fiecare moment de timp. Un mesaj x poate fi
reprezentat printr-un cuvnt de cod scurt la nceputul transmisiei pentru c apare frecvent la
nceputul transmisiei, chiar dac probabilitatea sa de apariie raportat la ntreg ansamblu este mic.
Mai trziu, cuvintele de cod scurte pot fi asignate altor mesaje dac frecvena de apariie se
schimb.
Codurile dinamice se mai numesc i coduri adaptive, care va fi folosit mai departe, ntruct ele
se adapteaz la schimbrile mesajului n timp. Toate metodele adaptive sunt metode ntr-un singur
pas: numai o singura trecere (scan) a realizrii sursei este necesar. n opoziie, codarea Huffman
static este n doi pai: un pas pentru determinarea probabilitilor i determinarea codului, i al
12
doilea par, pentru codare. Metodele ntr-un singur pas sunt mai rapide. n plus, n cazul metodelor
statice, codul determinat la primul pas trebuie transmis decodorului, mpreun cu mesajul codat.
Codul se poate transmite la nceputul fiecrei transmisii sau acelai cod poate fi folosit pentru mai
multe transmisii.
n metodele adaptive, codorul definete i redefinete dinamic cuvintele de cod, n timpul
transmisiei. Decodorul trebui s defineasc i s redefineasc codarea n acelai mod, n esena prin
nvarea cuvintelor de cod n momentul recepionrii acestora. Dificultatea primar a utilizrii
codrii adaptive este necesitatea folosirii unui buffer ntre surs i canal. Reelele de date aloc,
deci, resurse de comunicaie sursei, n sensul alocrii de memorie (buffere) ca parte a sistemului de
comunicaie.
n final exist i metode hibride, care nu sunt complet statice sau complet dinamice. ntr-un
astfel de caz simplu, emitorul i receptorul folosesc o mulime de coduri statice (codebooks). La
nceputul fiecrei transmisii, emitorul alege i trebuie s transmit numrul (numele,
identificatorul) codului folosit.
Compresia textelor este un subset al compresiei datelor i se ocup cu acei algoritmi care au
proprietatea ca toat informaia prezent n fiierul original, fiier necompresat, este prezent n
fiierul comprimat i deci n fiierul expandat. Nu se accept o pierdere de informaie, chiar dac
algoritmul de compresie poate aduga informaie redundant necesar pentru a efectua n bune
condiii decompresia (expandarea). Aceste tehnici garanteaz obinerea unui fiier expandat identic
cu cel original, existent naintea compresiei. Aceti algoritmi se numesc fr pierderi (lossless),
reversibili sau fr zgomot (noiseless).
Termenul text trebuie interpretat n sens larg. Este clar c un text poate fi scris n limbaj natural
sau poate fi generat de translatoare (aa cum fac diverse compilatoare). Un text poate fi considerat
c o imagine (rezultat dintr-o scanare, aa cum este cazul telefaxului) sau alte tipuri de structuri ce
furnizeaz date n fiiere liniare.
1.2. ALGORITMI ENTROPICI
Majoritatea surselor de informaie din domeniul calculatoarelor i al aplicaiilor internet sunt
discrete. Pentru a descrie o surs discret fr memorie (SDFM) sunt necesare dou mrimi:
alfabetul sursei i probabilitile de furnizare a fiecrui simbol:

,
_

p
N
p p
s
N
s s
S
...
2 1
...
2 1
:
;
1
1
) (

N
k
s
k
p
(1.2.1.)
13
Dac numrul de simboluri este finit, sursa se numete discret. Dac la un moment dat se
emite sigur un simbol atunci sursa este complet. Sursa este fr memorie dac evenimentele s
k
sunt
independente, adic furnizarea unui simbol la un moment dat nu depinde de simbolurile furnizate
anterior. Totalitatea simbolurilor unei surse formeaz alfabetul sursei. Orice succesiune finit de
simboluri, n particular un singur simbol, se numete cuvnt. Totalitatea cuvintelor formate cu un
anumit alfabet se numete limbaj.
Informaia furnizat de un simbol al sursei este:
) ( log ) (
k
s p
k
s i
[bii] (1.2.2)
Entropia este informaia medie pe simbol sau, altfel formulat, este incertitudinea medie asupra
simbolurilor sursei S, sau informaia medie furnizat de un simbol.


N
i
s
i
p
s
i
p
N
i
s
i
i
s
i
p S H
1
)) ( log( ) (
1
) ( ) ( ) (
[bit/simbol] (1.2.3)
Noiunea de informaie trebuie legat i de timp, ntruct, cel puin din punct de vedere al
utilizatorului informaiei, nu este indiferent dac furnizarea unui simbol are loc ntr-o or sau ntr-
un an. n acest sens, se definete debitul de informaie al unei surse discrete.
Definiie - Debitul de informaie cantitatea medie de informaie furnizat n unitatea de timp.
[ ] biti/s
) ( 1
) ( ) (

S H
S H S
H
t

(1.2.4)
unde

este durata medie de furnizare a unui simbol:


[ ] s/simbol
1
) (

N
i
i
s
i
p

(1.2.5)
Definiie: Redundana unei surse discrete de informaie este diferena dintre valoarea maxim
posibil a entropiei i entropia sa:
[ ]
R(S) = max{H(S)} - H(S) biti / simbol
(1.2.6)
In cadrul compresiei se are n vedere sistemul de transmitere a informaiei din figura 1.1.1.
Procesul de transformare a mesajelor sursei ntr-un mesaj codat se numete codare (coding sau
encoding, n engleza). Algoritmul care construiete transformarea se numete codor (encoder, n
engleza). Decodorul realizeaz transformarea invers, genernd mesajul n forma sa original.
Canalul se consider fr erori, deci este canal fr perturbaii. Alfabetul codului este, n
general, X={x
k
| k=1,2,...,D}. Pentru cazul compresiei sa va considera cazul binar.
14
Codificarea a aprut ca o necesitate de schimbare a formei de prezentare a informaiei n scopul
prelucrrii sau transmiterii acesteia. Codificarea poate fi uniform (bloc), dac se folosete aceeai
lungime a cuvintelor de cod, sau neuniform (variabil), cnd lungimea cuvintelor de cod nu este
constant. Operaia invers codificrii se numete decodificare, adic transformarea invers ce
permite obinerea formei iniiale de reprezentare a informaiei.
1.2.1. CODAREA BINAR HUFFMAN STATIC
Acest procedeu se bazeaz pe ideea de a partiiona mulimea mesajelor
sursei S = {s
1
, s
2
,..., s
N
} n submulimile S
0
i S
1
, astfel nct suma probabilitilor
mesajelor incluse n S
0
s fie ct mai apropiat de suma probabilitilor
mesajelor incluse n S
1
. La rndul lor, submulimile S
0
i S
1
pot fi partiionate n
submulimile S
00
i S
01
, respectiv S
10
i S
11
astfel nct suma probabilitilor
mesajelor incluse n cele patru submulimi s fie ct mai apropiate posibil.
Procedeul se continu n mod similar pn cnd se obin submulimi ce conin
un singur mesaj.
n felul acesta, pentru orice distribuie a sursei S ce urmeaz a fi codat se
va obine un cod compact, adic lungimi medii ale cuvintelor de cod ce nu mai
pot fi micorate prin nici un alt
procedeu de codare.
Pentru ca partiiile s satisfac condiiile menionate, se procedeaz astfel:
1. Se ordoneaz mulimea mesajelor sursei S n ordinea descresctoare a
probabilitilor, obinndu-se astfel mulimea ordonat R
0
= {s
1
, s
2
, , s
N
} ,
cu p(s
1
) p(s
2
) p(s
N
), cu schimbarea eventual a indicilor mesajelor
pentru realizarea ordonrii respective;
2. Se reunesc ultimele dou mesaje (de probabilitile cele mai mici) ntr-un
nou mesaj, notat cu r
1
, cruia i se aloc o probabilitate egal cu suma
probabilitilor mesajelor componente.
Se ordoneaz din nou mesajele n ordinea descresctoare a
probabilitilor, formndu-se astfel prima surs restrns R
0
= {s
1
, s
2
,,r
1
,}
, cu p(s
1
) p(s
2
) p(r
1
) .
3. Se reunesc ultimele dou mesaje din sursa restrns R
1
ntr-un nou mesaj r
2
, de probabilitate
egal cu suma probabilitilor mesajelor componente. Se ordoneaz mesajele n ordine
descresctoare, formndu-se astfel sursa restrns R
2
. n mod analog, din R
2
se formeaz
sursa restrns R
3
i aa mai departe, pn cnd se obine o surs restrns format numai
15
din dou mesaje, R
n
= {r
n
, r
n-1
}, cu p(r
n
) p(r
n-1
). De fapt, r
n
va fi S
0
i r
n-1
va fi S
1
sau
invers.
Din modul de formare a surselor restrnse R
i
, rezult c mulimea S a mesajelor poate fi
partiionat n dou submulimi r
n
i r
n-1
astfel nct probabilitile p(r
n
) i p(r
n-1
) sunt cele
mai apropiate posibil. La rndul lor, submulimile r
n
i r
n-1
, pot fi partiionate n alte dou
submulimi, de probabilitile cele mai apropiate posibil. Partiionrile se continu pn se
obin submulimi care conin un singur mesaj.
4. Cuvintele de cod corespunztoare fiecrui mesaj se obin astfel:
- submulimii r
n
i se aloc simbolul "0" (sau "1");
- submulimii r
n-1
, i se aloc simbolul "1" (sau "0");
- la fiecare partiionare se aloc arbitrar celor dou submulimi "0" sau "1", operaia
continundu-se pn se obin submulimi ce conin un singur mesaj s
k
, k =
N , 1
.
Deoarece alocarea lui "0" i "1" este arbitrar la fiecare partiionare, rezult c unei surse S i se
pot ataa o multitudine de coduri instantanee, toate, ns, avnd aceeai lungime medie a cuvintelor
de cod, care nu mai poate fi micorat prin nici un alt procedeu de codare a mesajelor luate
individual.
Dac sursa primar S poate furniza N mesaje, atunci submulimea restrns R
1
, va avea N-1
mesaje, submulimea restrns R
2
va conine N-2 mesaje i aa mai departe, ultima submulime
restrns R
n
va conine N n mesaje, care sunt r
n
i r
n-1
, adic se poate scrie:
N n = 2 => n = N 2 (1.2.1.1)
Dac submulimii r
n
i se aloc simbolul "0" i submulimii r
n-1
simbolul "1", celor N-2
partiionri putndu-li-se aloca arbitrar "0" sau "1", rezult un total de 2
N2
posibiliti de codare.
Dac, ns, submulimii r
n
i se aloc simbolul "1", iar submulimii r
n-1
simbolul "0", mai rezult 2
N2
posibiliti de codare. Rezult, deci, c prin acest procedeu de codare se pot realiza 2
N2
+ 2
N2
= 2
N1
coduri instantanee, toate avnd toate aceeai lungime medie a cuvintelor de cod.
Prin definiie, se numete cod compact, codul care realizeaz lungimea medie minim a
cuvintelor de cod. Deoarece prin procedeul de codare Huffman se obine cea mai mic lungime
medie a cuvintelor de cod, nseamn c prin acest procedeu se obin coduri instantanee compacte.
Evident, un cod absolut optimal este i compact, reciproca nefiind totdeauna valabil [9].
16
Exemplu: MARIA ARE MERE

a. b. c.
Figura 1.2.1.1. Procedeul de codare Huffman
1.2.2. CODAREA BINAR SHANNON FANO
Acest procedeu se aplic de obicei n cazurile particulare n care probabilitile de furnizare ale
mesajelor sunt puteri ntregi pozitive ale lui (1/2), adic, de forma:
p(s
k
)=
k
k
l
l

,
_

2
2
1
,
N k , 1
(1.2.2.1)
unde l
k
este un numr ntreg pozitiv.
Dac relaia (1.2.2.1) este satisfcut, mulimea S = {s
1
, s
2
,..., s
N
} a mesajelor sursei discrete de
informaie ce urmeaz a fi codat poate fi partiionat n dou submulimi S
0
i S
1
, astfel nct suma
probabilitilor mesajelor incluse n S
0
, notat cu p(S
0
), s fie egal cu suma probabilitilor
mesajelor incluse n S
1
, notat cu p(S
1
). Sursa S fiind totdeauna complet, se poate scrie:

1
1 0
1 0
1 0
2
2
1
) ( ) (
1 ) ( ) (
) ( ) (

S p S p
S p S p
S p S p
(1.2.2.2)
Submulimile S
0
i S
1
se pot partiiona la rndul lor n S
00
i S
01
, respectiv n S
10
i S
11
, astfel
nct suma probabilitilor mesajelor incluse n cele patru submulimi s fie aceeai, adic se poate
scrie relaia:
p(S
00
) = p(S
01
) = p(S
10
) = p(S
11
) =
2
2
2
2
1

,
_

(1.2.2.3)
Se procedeaz n mod analog pn se obin submulimi care conin un singur mesaj. Se observ
c fiecare submulime are suma probabilitilor mesajelor incluse egal cu o putere ntreag a lui
(1/2). Puterea ntreag este egal cu numrul indicilor submulimii respective Dac submulimea
conine un singur mesaj, s
k
, i are un numr de indici egal cu l
k
, atunci se poate scrie:
17

k
k
l
l
k
s p

,
_

2
2
1
) ( (1.2.2.4)
de unde rezult necesitatea ca sursa S ce urmeaz a fi codat s-i furnizeze mesajele cu
probabiliti egale cu 1/2 la o putere ntreag, pozitiv.
Sursa fiind complet, se poate scrie:
1 ) (
1

N
k
k
s p
(1.2.2.5)
nlocuind (1.2.2.4) n (1.2.2.5), rezult:

1 2
1

N
k
l
k
(1.2.2.6)
Cuvintele de cod se vor obine, atunci, astfel:
1. Se atribuie simbolul "0" submulimii 0 S i simbolul "1" submulimii 1 S , (sau invers), astfel
c toate cuvintele corespunztoare mesajelor incluse n S
0
vor ncepe cu "0" i toate
cuvintele corespunztoare mesajelor incluse n S
1
, vor ncepe cu "1" (sau invers);
2. Se aloc submulimilor S
00
i S
10
ca al doilea mesaj "0", iar submulimilor S
01
i S
11
ca al
doilea mesaj "1" (sau invers). n felul acesta, cuvintele de cod corespunztoare mesajelor
incluse n S vor ncepe cu 00, cuvintele de cod corespunztoare
mesajelor incluse n S
10
vor ncepe cu 10 i aa mai departe, cuvintele
de cod corespunztoare mesajelor induse n S
11
vor ncepe cu 11.
3. Operaia se continu n acelai mod, pn cnd n fiecare submulime
rmne un singur mesaj, cruia i va corespunde cuvntul de cod
format din irul de indici ai submulimii respective.
Deoarece la fiecare partiionare n dou submulimi atribuirea mesajelor
"0" i "1" este arbitrar, rezult c prin acest procedeu se pot obine o
multitudine de coduri instantanee, dar toate absolut optimale.
n principiu, procedeul de codare descris s-ar putea aplica n general,
adic i atunci cnd relaia (1.2.2.6) nu este satisfcut. n acest caz,
partiionrile n submulimi trebuie efectuate astfel nct suma
probabilitilor mesajelor incluse n submulimile respective s fie ct mai
apropiate. Atribuind simbolurile "0" i "1" ca n procedeul descris, se obin
totdeauna coduri instantanee.
Cu ct sumele probabilitilor mesajelor componente ale submulimilor
respective vor fi mai apropiate, cu att lungimea medie a cuvintelor de cod
va fi mai mic [14].
18

a. b. c. d.
Figura 1.2.2.1. Procedeul de codare Shannon Fano
1.2.3. CODAREA BINAR HUFFMAN DINAMIC (ADAPTIV)
Procedeul de codare binar Huffman descris anterior necesit cunoaterea probabilitilor cu
care sursa i furnizeaz mesajele. n literatura de specialitate aceast situaie este cunoscut i sub
denumirea de codare Huffman static. n cazul n care probabilitile de furnizare a mesajelor nu
sunt cunoscute, se folosete codarea Huffman dinamic sau adaptiv.
n descrierea codrii Huffman dinamice sau adaptive se vor folosi urmtoarele notaii i noiuni:
- Nodurile terminale sau externe din graful arborescent se vor numi frunze, corespunznd
mesajelor sursei;
- Cuvntul de cod pentru un mesaj se obine parcurgnd arborele de la rdcin la frunza
corespunztoare simbolului. Prin convenie, zero se va aloca unei ramuri din stnga i unu,
unei ramuri din dreapta;
- Nodurile de la extremitile ramurilor care pleac dintr-un nod reprezint fiii sau copiii
nodului respectiv, numit nod printe;
- Ponderea unui nod extern este numrul de apariii a simbolului corespunztor frunzei
respective pn la acel moment;
- Ponderea unui nod intern este suma ponderilor fiilor nodului respectiv;
- Dac sursa ce urmeaz a fi codat furnizeaz n mesaje, n graf exist 2n+1 noduri interne i
externe, numerotate n continuare y
1
, ,y
2n+1
. Dac x
j
este ponderea nodului cu numrul y
j
,
trebuie s existe relaia x
1
x
2
x
2n+1
;
- Nodurile y
2j1
i y
2j
sunt fii ai aceluiai nod printe, iar numrul de ordine al printelui este
mai mare dect y
2j1
i y
2j
.
Ultimele dou caracteristici se numesc de fraternitate i orice arbore care are aceast proprietate
este un arbore Huffman. n codarea Huffman dinamic, nici emitorul, nici receptorul nu cunosc
statistica sursei la nceperea transmisiei, astfel nct arborii de la transmisie i recepie constau
dintr-un singur nod corespunztor mesajelor nc netransmise, de pondere zero. Pe parcursul
19
transmisiei, nodurile corespunztoare mesajelor transmise sunt adugate arborelui, care este
reconfigurat pe baza unui procedeu de actualizare. naintea nceperii transmiterii se stabilete un
cod pentru fiecare mesaj, dup cum urmeaz:
Dac sursa furnizeaz mesajele s
1
, s
2
, ..., s
N
, se determin parametrii e i r, astfel nct N =
2
e
+ r, 0 r < 2
e
. Mesajul s
k
este codat prin reprezentarea pe e +1 bii a lui k 1, dac 1 k 2r, n
caz contrar, s
k
este reprezentarea pe e bii a lui k r 1. De exemplu, pentru N = 26r =10 i e =
4s
1
= 00000, s
2
= 00001,..., s
22
=1011.
1.2.4. COMPRESIA ARITMETIC
Cea mai eficient metod entropic de compresie a datelor care elimin
aproape complet redundana unei surse de informaie este compresia
aritmetic.
Algoritmul de compresie. Compresia aritmetic a fost descoperit de
ctre cercettorii Peter Elias, Jorma J. Rissanen i Richard C. Pasco. Ideea care
st la baza acestei metode de compresie este aceea de codifica un ir de
simboluri folosind un singur cod i nu cte un cod pentru fiecare simbol n
parte. De fapt, orice ir de simboluri generat de o surs de informaie este
codificat
folosind un numr real cuprins n intervalul [0, 1).
Datorit faptului c aceast metod de compresie este entropic avem
nevoie de probabilitile pi (0 i < m, unde m este numrul de simboluri pe
care le poate genera o surs de informaie S) de apariie ale simbolurilor.
Similar algoritmului Huffman se pot construi variantele static, semi-static
i dinamic ale algoritmului de compresie aritmetic.
n cazul variantei semistatice probabilitile se calculeaz pe baza
simbolurilor generate de sursa de informaie S, fiind nevoie de dou parcurgeri
ale irului de simboluri la fel ca n cazul algoritmului Huffman.
Considerm un interval [a, b) [0, 1), b > a. Fiecrui simbol care poate fi
generat de o surs de informaie S i se ataeaz un subinterval al lui [a, b) cu
proprietatea c lungimea subintervalului corespunztor unui simbol este direct
proporional cu probabilitatea de apariie a simbolului respectiv i oricare
dou subintervale corespunztoare la dou simboluri distincte nu au puncte de
intersecie.
20
Fie P
i
probabilitatea cumulat a simbolului A
i
, P
0
= 0 i P
i
= p
0
+ ...+ p
i-1
, 0
i < m, i fie l = b - a lungimea intervalului [a, b). Din faptul c suma tuturor
probabilitilor de apariie ale simbolurilor A
i
, 0 i < m este 1, rezult c Pi
[0, 1).
Fiecrui simbol A
i
i se va ataa intervalul [a + l Pi , a + l (P
i
+ p
i
)).
Lungimea subintervalului corespunztor unui simbol A
i
este egal cu l p
i
.
n cazul n care o surs de informaie nu genereaz toate simbolurile pe care
le poate genera, atunci probabilitatea de apariie a unor simboluri poate fi 0
deci, lungimea subintervalelor ataate simbolurilor care nu sunt generate este
0, caz n care avem intervale degenerate, i, dac p
i
este 0 i p
i+1
este diferit de
0, atunci intersecia dintre subintervalele corespunztoare celor dou simboluri
este diferit de mulimea vid i nu mai sunt respectate condiiile enunate mai
sus. Dac se elimin subintervalele de lungime 0, atunci condiiile sunt
respectate.
Algoritmul de compresie aritmetic se bazeaz pe acest mprire a unui
interval.
Faptul c avem intervale degenerate nu va influena funcionalitatea
algoritmului, deoarece o surs de informaie nu va genera niciodat simboluri
care au probabilitatea de apariie 0.
Algoritmul de codificare const n alegerea unui subinterval al intervalului
[0, 1) corespunztor primului simbol generat de o surs S i apoi, ca nou
interval se consider subintervalul ales i se alege subintervalul corespunztor
celui de-al doilea simbol.
Algoritmul de compresie aritmetic folosit pentru a codifica un ir de
simboluri generat de o surs de informaie S este urmtorul:
1. considerm intervalul care are extremitatea din stnga a i
lungimea l;
2. fie pi probabilitile de apariie ale simbolurilor care pot fi generate
de o surs de informaie S;
3. fie P
i
probabilitile cumulate ale simbolurilor;
4. pentru fiecare simbol A
i
generat de sursa de informaie S execut:
- a a + l P
i
;
- l l p
i
;
21
5. rezultat a + l / 2.
n ciclul repetitiv prezentat anterior se schimb intervalul iniial cu
subintervalul corespunztor simbolului generat de sursa de informaie S.
Datorit faptului c intervalele ataate simbolurilor care au probabilitatea de
apariie diferit de 0 sunt disjuncte, fiecare simbol este unic determinat de
orice numr care aparine subintervalului corespunztor.
n teorie se folosete ca interval iniial intervalul [0, 1), deci cu captul din
stnga 0 i lungimea 1.
Dup parcurgerea irului de simboluri generat de o surs de informaie se
transmite un numr real din intervalul [0, 1) care reprezint codificarea irului
de simboluri. Numrul real trebuie transmis cu o precizie foarte mare. Acest
numr este dat, de obicei, de mijlocul ultimului interval calculat cu ajutorul
algoritmului prezentat anterior: a + l/2.
Algoritmul de codificare mai poate fi construit folosind limitele inferioar i
superioar ale unui interval n locul limitei inferioare i lungimii intervalului. n
acest caz, dup linia n care se calculeaz lungimea intervalului se adaug linia
b a + l.
Dac intervalul iniial este [0, 1), atunci precizia cu care trebuie calculat
limita din stnga pentru un simbol cu probabilitatea p
i
, 0 i < m, este de -
log
2
p
i
1 bii.
Dac analizm modul de construire al numrului real plecnd de la
intervalul [0; 1), atunci precizia cu care trebuie transmis numrul care
reprezint mijlocul ultimului interval calculat este 1 log
1
0
2
+
1
]
1

,
_

m
i
i i
p p n de bii,
unde n reprezint numrul de simboluri generate de sursa S.
Se poate observa foarte uor c diferena dintre entropia irului generat de
sursa de informaie S i numrul mediu de bii necesari transmiterii unui simbol
este foarte mic (mai mic de 1 bit).
De exemplu, fie o surs de informaie S care poate genera simbolurile 'a', 'b'
i 'c' cu probabilitile 1/2, 1/4 i 1/4.
n figura 1.2.4.1. se poate observa modul de codificare a irului de simboluri
'abac'. Precizia cu care trebuie transmis rezultatul este de 7 bii (rezultatul este
0,3046875 = 0,01001112 ceea ce nseamn c se transmit biii 0100111,
22
deoarece numrul este cuprins ntre 0 i 1 i ne intereseaz doar poriunea
care se afl dup virgul).
Figura 1.2.4.1. Procesul de codificare aritmetic
Pe lng rezultatul obinut n urma codificrii mai trebuie transmis
dicionarul care este format din probabilitile de apariie ale simbolurilor care
pot fi generate de sursa de informaie S.
Motivul pentru care rezultatul l reprezint mijlocul ultimului interval
calculat, i deci o cretere a preciziei cu un bit, este acela c n practic exist
situaii n care reprezentarea n baza 2 a celor dou limite ale intervalului,
folosind aceeai precizie, sunt egale pentru c microprocesoarele existente
realizeaz operaii cu numere reale cu o precizie finit de pn la 80 de bii.
Din punct de vedere teoretic este suficient ca rezultatul s fie constituit de
limita inferioar a ultimului interval gsit, calculat cu precizia de bii,
deoarece, bazndu-ne pe cele enunate anterior, un simbol cruia i s-a ataat
intervalul [a, b) este unic determinat de orice numr real care aparine
intervalului.
Algoritmul de decompresie. Pentru a decodifica un numr real, cuprins
ntre 0 i 1, a crui lungime n bii se cunoate, trebuie s avem probabilitile
de apariie ale simbolurilor care au fost folosite n procesul de codificare i
numrul total n al simbolurilor care au fost codificate.
23

Figura 1.2.4.2. Procesul de decodificare aritmetic
La nceputul procesului de decodificare considerm intervalul [a, a + l),
unde a = 0 i l = 1. Fiecrui simbol i corespunde un subinterval al acestui
interval.
n continuare se caut subintervalul cruia i aparine numrul care trebuie
decodificat. Dup ce s-a gsit acest subinterval se transmite simbolul
corespunztor acestuia i noul interval devine cel gsit. Acest pas se execut
pn n momentul n care am decodificat n simboluri.
Dac nu se transmite numrul n de simboluri care au fost codificate, n
momentul compresiei alfabetul sursei S de informaie se poate extinde cu un
simbol suplimentar care are semnificaia de sfritul codificrii care se va
codifica dup ce sursa S nu mai genereaz simboluri. n concluzie, n momentul
n care numrul se va afla n subintervalul corespunztor simbolului de sfrit
de codificare, decodificarea se va ncheia.
n figura 1.2.4.2. se poate observa modul de decodificare a numrului
0,3046875 pentru alfabetul format din simbolurile 'a', 'b' i 'c', care au
probabilitile 1/2, 1/4 i 1/4, i numrul de simboluri care au fost codificate n
= 4.
La primul pas se observ c numrul rez aparine subintervalului [0, 0,5),
subinterval corespunztor simbolului 'a', deci acest simbol se va transmite i
noul interval va deveni [0, 0,5).
24
La al doilea pas numrul rez aparine subintervalului [0,25, 0,375) care
corespunde simbolului 'b', acest simbol se va transmite i noul interval este
[0,25, 0,375).
La al treilea pas numrul rez aparine subintervalului [0,25, 0,3125) care
corespunde simbolului 'a', acest simbol se va transmite i noul interval este
[0,25, 0,3125).
La al patrulea pas numrul rez aparine subintervalului [0,296875, 0,3125)
care corespunde simbolului 'c', acest simbol se va transmite i noul interval
este [0,296875, 0,3125). n acest moment se ncheie procesul de decodifica
decodificare deoarece au fost decodificate n = 4 simboluri. n timpul
decodificrii a fost transmis irul de simboluri 'abac'.
Detalii de implementare. Datorit faptului c pentru date de dimensiuni
mari precizia cu care trebuie transmis rezultatul devine foarte mare,
calculatoarele nu dein resurse suficiente pentru a efectua operaii cu numere
reale cu precizie mare. De exemplu, exist situaii cnd trebuie folosit o
precizie de 8 105 bii sau chiar mai mare, n timp ce calculatoarele moderne
au o precizie de cel mult 128 de bii. n acest caz, algoritmii prezentai anterior
nu se pot utiliza n practic.
Toate implementrile performante ale acestui algoritm nu utilizeaz operaii
cu numere reale, ci folosesc operaii cu numere ntregi reprezentate pe 16 sau
32 de bii pentru a evita erorile de calcul care apar cnd se efectueaz operaii
cu numere reale reprezentate n virgul mobil. n unele implementri, cele
dou operaii de nmulire, care apar n algoritmii prezentai, au fost nlocuite
cu adunri i deplasri pe bii. Cu toate c s-a obinut o scdere a timpului de
execuie pentru date de dimensiuni mari, aceti algoritmi nu mai codific
informaia la fel de eficient. n practic se folosesc implementri ale algoritmilor
de codificare i decodificare mult mai performante bazate pe folosirea
noiunilor de aritmetic legate de modul de calcul folosind baze de numeraie
puteri ale lui 2 (de obicei se lucreaz n bazele 28 sau 216) n funcie de tipul
de calculator i sistem de operare pe care se va folosi programul de
compresie/decompresie.
Compresia aritmetic se folosete n combinaie cu alte metode i se obine
o reducere considerabil a coninutului unui fiier sau a datelor transmise
printr-o reea de
25
calculatoare (internet, reea local etc.).
Aceast metod de compresie a datelor nu este foarte rspndit deoarece
compania IBM deine patente de inventator asupra ctorva algoritmi
performani de compresie aritmetic.
Majoritatea programelor de compresie bazate pe codificarea aritmetic
folosesc modelul cvasi-aritmetic. n cadrul acestui model, probabilitile
cumulate se recalculeaz n momentul n care cea mai mare dintre probabiliti
atinge o valoare prag Prg, i nu dup fiecare simbol generat de o surs de
informaie. Acest lucru duce la o scdere a timpului necesar unui program de
compresie pentru a codifica un ir de simboluri [13].
1.3. ALGORITMI PE BAZ DE DICIONAR
Tehnicile de dicionar in seama de structura datelor pentru a crete volumul compresiei. Aceste
tehnici (att cele statice, ct i cele dinamice) se bazeaz pe construcia unei liste cu cele mai
frecvente structuri care apar, numite modele, i le codeaz prin transmiterea unui cuvnt care indic
poziia lor n list. Aceste metode de codare sunt utile pentru surse care genereaz un numr mic de
modele cu frecven ridicat, cum sunt textele i comenzile de calculator.
n multe aplicaii ieirea unei surse este format din secvene de mesaje care formeaz modele
care se repet. Un exemplu clasic este un text n care anumite expresii sau cuvinte (modele) revin
constant, n timp ce alte modele apar foarte rar. Esena codrii pe baz de dicionar const n
ntocmirea unei liste cu cele mai frecvente modele, acestea fiind codate prin indicarea poziiei lor n
list, cunoscut sub numele de index. Astfel, intrarea n codor se mparte n dou pri:
- cu modele cu apariie frecvent;
- cu modele cu apariie rar.
Pentru ca aceast tehnic s fie eficient, clasa modelelor frecvente i, implicit, mrimea
dicionarului, trebuie s fie mult mai mic dect numrul total de modele.
De exemplu, dac se presupune existena a 32 de caractere (litere i semne de punctuaie) i se
codeaz caracterele individual, fiecare fiind egal probabile, ar fi necesari 5 bii/caracter. Dac se
presupun modele formate din 4 caractere, ar rezulta 32
4
=2048576 modele, necesitnd 20 bii/model.
Dac se presupune c 256 de modele sunt mai frecvente, acestea se grupeaz ntr-un dicionar.
Pentru codarea fiecrui model din cele 256 sunt necesari 8 bii. Pentru transmiterea unui model care
exist n dicionar, se va transmite un bit de semnalizare (fie acesta 0), urmat de un index de 8 bii,
26
care identific cuvntul din dicionar. Dac cuvntul nu este n dicionar se trimite un bit de
semnalizare (fie acesta 1), urmat de 20 de bii care codeaz modelul. Dac modelul nu este n
dicionar, se trimit mai muli bii dect n schema original (adic 21 n loc de 20), iar dac este n
dicionar, se transmit 9 bii n loc de 20.
Eficiena tehnicii depinde de procentul cuvintelor care se afl n dicionar. Dac probabilitatea
unui model din dicionar este p i, evident, 1-p este probabilitatea ca modelul s nu fie n dicionar,
atunci numrul mediu de bii/model este
R=9p+21(1-p)=21-12p (1.3.1)
Pentru ca schema de codare s fie eficient, R trebuie s fie mai mic dect 20, ceea ce se
ntmpl pentru p 0,08(3). Dac toate modelele ar fi egal probabile, probabilitatea fiecruia este
de aproximativ 0,00025.
n practic se dorete o rat ct mai mic, ceea ce conduce la condiia ca p s fie ct mai mare.
Aceasta nseamn c modelele trebuie selectate atent dintre cele mai frecvente, ceea ce impune o
bun cunoatere a structurii sursei.
n funcie de cunotinele disponibile pentru construcia dicionarului, se poate folosi o codare
static sau una dinamic.
Tehnica de codare bazat pe dicionar static este potrivit cnd sunt disponibile cunotine a
priori despre surs.
O tehnic de dicionar static este codarea digram. Dicionarul este format din toate literele
alfabetului sursei i cele mai frecvente perechi de dou litere, numite digrame. De exemplu, se
presupune c s-a construit un dicionar de mrime 256, format din 95 caractere ASCII i 161
digrame care sunt cele mai frecvent utilizate perechi de dou caractere. Se codeaz apoi cele 256 de
modele pe 8 bii corespunznd celor 95 de caractere ASCII i celor 161 de digrame. Dac se
dorete codarea unei secvene de caractere ASCII se citesc primele dou caractere din secven i
se caut dac exist n dicionar. Dac da, indexul digramei este codat i transmis. Dac nu, primul
caracter al perechii este transmis prin codul corespunztor indexului caracterului, iar al doilea
caracter devine primul caracter al digramei urmtoare. Codorul mai citete un caracter pentru a
completa digrama i procedura se repet.
Exemplu:.
Fie sursa cu alfabetul S={a, b , c, d, r} . Pe baza cunoaterii sursei, se construiete dicionarul
din Tabelul 1.3.1.
Tabelul 1.3.1. Formarea dicionarului
27
Se presupune c se dorete a coda secvena a b r a c a d a b r a.
Deoarece digrama ab este n dicionar, aceasta se codeaz cu 101, apoi se citete ra, care nu
exist n dicionar, se codeaz r cu 100, apoi se citete ac, care se codeaz cu 110. Continund, se
obine: 101 100 110 111 101 100 000.
Dac s-ar transmite pentru fiecare din cele 11 simboluri ale sursei cte 3 bii (deoarece sunt 5
simboluri diferite), ar rezulta 33 bii. Prin folosirea acestui dicionar s-au transmis 73 = 21
simboluri.
Tabelul 1.3.2. Cele mai frecvente 30 de perechi de caractere dintr-un document de 41.364
caractere
Pereche Numr de
apariii
Pereche Numr de
apariii
eb 1128 ar 314
bt 828 at 313
bb 823 bw 309
th 817 te 296
he 712 bs 295
in 512 db 272
sb 494 bo 266
er 433 io 257
ba 425 co 256
tb 401 re 247
en 392 b$ 246
on 385 rb 239
nb 353 di 230
ti 322 ic 229
bi 317 ct 226
Tabelul 1.3.3. Cele mai frecvente 30 de perechi de caractere dintr-un program C de 65.983
caractere
28
Continuarea Tabelului 1.3.3.
Se observ c cele dou tabele sunt foarte diferite. Este uor de observat c un dicionar
proiectat pentru compresia documentelor LATEX nu va fi foarte eficient pentru compresia unui
program C, putnd conduce la o extensie n loc de compresie.
Frecvent se dorete a se dispune de tehnici de compresie care s fie capabile s comprime
ieirea mai multor tipuri de surse, fr cunoaterea prealabil a statisticii sursei. Pentru asemenea
aplicaii se folosesc tehnici de adaptare a dicionarului la caracteristicile sursei.
Exist dou tehnici de dicionar adaptiv, LZ77 i LZ78, care se datoreaz lui Jacob Ziv i
Abraham Lempel, pe care se bazeaz cele mai multe metode de compresie cu dicionar adaptiv[14].

1.3.1. ALGORITMUL LZ77
n metoda LZ77 dicionarul este o poriune din secvena codat anterior. Codorul examineaz
secvena de intrare printr-o fereastr glisant, care const din dou pri:
- un buffer de cutare, care conine o poriune din secvena tocmai codat;
- un registru care conine urmtoarea poriune a secvenei ce urmeaz a fi codat.
n Figura 1.3.1.1, se consider pentru simplitate c bufferul conine 8 simboluri, iar registrul, 7,
n practic acestea fiind mult mai mari.
29
Pentru codarea secvenei din registru, codorul mut un pointer de cutare napoi prin buffer,
pn gsete nceputul celei mai lungi asemnri cu nceputul secvenei stocate n registru. Distana
dintre pointer i registru se numete offset. Numrul simbolurilor consecutive din bufferul de
cutare i din registru care coincid cu simbolurile din registru, ncepnd cu primul caracter se
numete lungimea secvenei sau a asemnrii. Dac n registru mai exist coincidene ntre
caracterele deja codate i cele ce urmeaz a fi codate, ncepnd cu primul caracter din registru,
lungimea secvenei se poate prelungi n acesta. Odat gsit aceast lungime, codorul codeaz
secvena cu tripletul <o,l,c> , unde o offsetul, l lungimea i c cuvntul de cod corespunztor
simbolului din registru la care s-a oprit asemnarea.
Figura 1.3.1.1. Procedeul codrii algoritmului LZ77
Pentru exemplul din Figura 1.3.1.1. o= 7, l= 4, c= 4. Motivul transmiterii celui de-al treilea
element din triplet este de a evita situaia cnd simbolul din registru nu este n buffer. n acest caz o
= 0, l = 0 i c este codul simbolului nsui.
Dac mrimea bufferului de cutare este S , mrimea ferestrei W i mrimea alfabetului sursei
este A, numrul de bii necesari codrii unui triplet este [log
2
S]+[log
2
W]+log
2
A]. Al doilea este
[log
2
W], i nu [log
2
W-S],deoarece lungimea asemnrii poate depi dimensiunea bufferului de
cutare.
n exemplul urmtor sunt evideniate situaiile n care:
- nu exist nici o potrivire a caracterului ce urmeaz a fi codat n fereastr;
- exist potrivire;
- secvena potrivit se extinde i n registru.
Fie secvena c a b r a c a d a b r a r r a r r a d care se codeaz cu metoda prezentat anterior.
Se presupun S=7, W=13. Poziionarea iniial a secvenei n fereastr este dat n Fig. 1.3.1.2.
Secvena din bufferul de cutare se transmite n clar.
Figura 1.3.1.2. Poziionarea iniial a secvenei n fereastr pentru LZ77
Pentru nu se gsete nici o asemnare n bufferul de cutare i se transmite <0,0,c(d)>. Fereastra
se deplaseaz cu o poziie, ca n Figura 1.3.1.3.
30
Figura 1.3.1.3. Deplasarea ferestrei cu o poziie pentru cutarea unei asemnri
Cutnd n buffer, se gseste potrivire cu a la un offset de 2 (cu l=1), de 4 (l=1) i de 7, cnd
lungimea asemnrii este 4. Se transmite tripletul <7,4,c(r)> . Se mut fereastra cu 5 caractere, care
reprezint lungimea asemnrii (l=4) + caracterul codat n clar c(r), ca n Figura 1.3.1.4.
Figura 1.3.1.4. Deplasarea ferestrei cu l+1 poziii pentru cutarea unei noi asemnri
Acum se gsete o asemnare pentru r la o=1 (l=1) la o=3 (l=3) n buffer, dar prelungind
cutarea i n registru se obine lungimea asemnrii l=5 i se transmite <3,5,c(d)> . n acest caz
fereastra se mut cu 6 caractere.
Decodarea. Se presupune c s-a decodat secvena c a b r a c a i s-au recepionat tripletele
<0,0,c(d)>, <7,4,c(r)>, <3,5,c(d)> . Primul triplet este simplu de decodat, nu exist nici o asemnare
n secvena decodat i urmtorul simbol este d. Secvena decodat este acum:
Figura 1.3.1.5. Decodarea primului triplet
Primul element din al doilea triplet este 7, care spune unde se plaseaz pointerul i apoi se copie
4 caractere din acel punct.
Figura 1.3.1.6. Decodarea celui de-al doilea triplet
31
Secvena decodat este c a b r a c a d a b r a r. n final se decodeaz ultimul triplet. Se merge
napoi cu 3 poziii i se copie 5 caractere ncepnd cu acel punct.
Figura 1.3.1.7. Decodarea ultimului triplet
Se observ c asemnarea ncepe numai n bufferul de cutare, dar se poate extinde i n
registru. Dac ultimul caracter din registru ar fi fost r n loc de d, urmat de mai multe repetri de r
a r, ntreaga secven de r a r -uri ar fi putut fi codat cu un singur triplet.
Algoritmul LZ77 este o schem adaptiv foarte simpl, care nu necesit cunoaterea a priori a
sursei. Autorii algoritmului au artat c performana algoritmului tinde asimptotic la cel mai bun
rezultat ce poate fi obinut folosind o schem care cunoate n ntregime statistica sursei.
n practic exist modaliti de mbuntire a performanelor algoritmului LZ77. Cea mai
simpl modificare a algoritmului LZ77 i una dintre cele mai folosite este de a elimina folosirea
unui triplet pentru a coda un singur caracter, ceea ce este foarte ineficient, n special cnd exist un
numr mare de caractere care apar rar. Modificarea pentru eliminarea acestei ineficiene este de a
aduga un bit de semnalizare (flag) care s indice dac ceea ce urmeaz este cuvnt de cod pentru
un singur simbol. Folosind acest flag, se elimin necesitatea celui de-al treilea element din triplet.
Rmne de transmis o pereche de valori corespunztoare offsetului i lungimii. Acest algoritm este
cunoscut sub denumirea de LZSS.
Dintre arhivatorii uzuali care folosesc algoritmul LZ77, urmat de o codare cu lungime variabil
sunt PKZip, Zip, LHarc, ARJ [14].
1.3.2. ALGORITMUL LZ78
Algoritmul LZ77 a presupus implicit c modele asemntoare apar apropiate unele de altele,
folosind aceast structur a secvenei stocate n buffer ca dicionar pentru codare. Aceasta nseamn
c orice model care apare pe o durat mai mare dect fereastra codorului, nu va fi captat. Cea mai
defavorabil situaie este cea n care secvena de codat este periodic, cu perioada mai mare dect
bufferul de cutare.
Alegerea lungimii bufferului se face n funcie de statistica datelor ce urmeaz a fi codate.
Pentru exemplificare, se presupune c secvena de caractere are perioada 9, aa cum se arat n
Figura 1.3.2.1.
32
Figura 1.3.2.1. Procedeul codrii algoritmului LZ78
n situaia considerat bufferul are lungimea 8, astfel nct nici un nou simbol nu se potrivete
cu vreunul din buffer i va fi reprezentat separat. Cum aceasta implic transmiterea mai multor
simboluri (1 bit de flag pentru LZSS i un triplet pentru LZ77), rezultatul este o extensie, n loc de
compresie. Dac, ns, bufferul de cutare era mai lung cu o celul, secvena era comprimat
semnificativ.
Dei aceasta este o situaie extrem, sunt circumstane mai puin drastice n care mrimea
limitat a bufferului de cutare ar putea constitui un dezavantaj. Algoritmul LZ78 rezolv aceast
problem, prin renunarea la bufferul de cutare i ntocmirea unui dicionar explicit. Acest
dicionar trebuie construit att la emisie ct i la recepie n acelai mod. Intrarea este codat cu un
dublet <i,c>, unde:
i - este indexul corespunztor apariiei n dicionar;
c este codul caracterului ce urmeaz dup secvena gsit n dicionar.
Indexul 0 se folosete n cazul negsirii vreunei asemnri. Fiecare nou apariie n dicionar
este un nou simbol concatenat cu o apariie deja existent n dicionar.
Exemplu: S se codeze secvena d a b b a b/ d a b b a b/ d a b b a b/ d a b b a b/ d u u b/ d u u
b/ d u u. n secvena considerat caracterul b/ semnific spaiu. Iniial dicionarul este gol. Primele
trei ieiri ale codorului, pn la repetarea unuia din caracterele deja codate, sunt codate cu valoarea
indexului egal cu 0, astfel: <0,c(d)>, <0,c(a)>, <0,c(b)> .
Dicionar iniial este
Index apariie
1 d
2 a
3 b
al patrulea simbol este b, care este al treilea element din dicionar. Dac se adaug urmtorul
simbol, se obine ba, care nu este n dicionar, aa nct se codeaz aceste 2 simboluri ca <3, 2> i
se adaug ca al patrulea element n dicionar. Continund astfel, se obine dicionarul din Tabelul
1.3.2.1.
Tabelul 1.3.2.1. Formarea dicionarului aplicnd algoritmul LZ78
33
Se observ c apariiile din dicionar devin din ce n ce mai lungi i dac acestea se repet des,
(cum se ntmpl ntr-un cntec, de exemplu) dup un timp, ntreaga secven ar putea fi o apariie
n dicionar.
Dei algoritmul LZ78 are abilitatea de a capta modele i de a le pstra, el are i dezavantaje
serioase. Cum se vede din exemplu, dicionarul poate crete orict de mult. n practic se dorete
creterea dicionarului pn la un anumit moment i apoi fie simplificarea, fie tratarea lui ca un
dicionar fix.
1.3.3. ALGORITMUL LZW
Cea mai cunoscut modificare a algoritmului, cunoscut sub numele de varianta LZW, este
fcut de Welch, care a propus o tehnic care nltur necesitatea de codare a celui de-al doilea
element al perechii < i,c> . Pentru aceasta, dicionarul trebuie ncrcat cu toate literele alfabetului
sursei. n timpul codrii are loc i completarea dicionarului, astfel: dup ce se citete prima liter,
al crei model, fie acesta m, se gsete n dicionar, se concateneaz aceasta cu cea de-a doua
liter, fie aceasta a, pentru a forma un nou model, m*a (* - concatenare). Acest model nu se
gsete n dicionar, aa c se codeaz m cu indexul din dicionar i se adaug modelul m*a n
dicionar, la indexul care urmeaz literelor alfabetului iniial. Se ncepe apoi un nou model cu litera
a. Cum aceasta este n dicionar, se concateneaz cu urmtoarea liter din secvena de codat, fie
aceasta b, pentru a forma modelul a*b care se trece n dicionar la indexul urmtor, i aa mai
departe. Dac n procesul de completare a dicionarului se ajunge la un model deja existent n
dicionar, se concateneaz acesta cu caracterul urmtor, pentru a forma un nou model care se nscrie
n dicionar i procesul continu n acelai mod.
n general, dac prin adugarea unei litere, a, la un model existent, m, rezult modelul m*a care
nu este n dicionar, atunci indexul lui m este transmis la receptor, modelul m*a este adugat la
dicionar i se ncepe un alt model cu litera a.
34
Se folosete aceeai secven utilizat n exemplul anterior: d a b b a b/ d a b b a b/ d a b b a b/
d a b b a b/ d u u b/ d u u b/ d u u i se codeaz cu algoritmul LWZ. Se presupune c alfabetul
sursei este {b/, a, b, d, u } i dicionarul iniial este dat n Tabelul 1.3.3.1.
Tabelul 1.3.3.1. Exemplu de dicionar iniial pentru codarea LWZ
Codorul ntlnete nti litera d. Acest model este n dicionar, aa c se concateneaza cu litera
urmtoare formnd da. Acest model nu este n dicionar, aa c se codeaz d cu indexul 4 din
dicionar, se adaug modelul da n dicionar la indexul 6 i se ncepe un nou model plecnd de la
litera a. Cum a este n dicionar, se concateneaz urmtorul simbol b, pentru a forma modelul
ab, care nefiind n dicionar, se introduce la indexul 7 i se ncepe construcia unui nou model cu
litera b. Se continu n acest mod, construind modele de 2 litere pn se ntlnete litera d n a doua
secven d a b b a. n acest moment, ieirea din codor const n ntregime din indici ai dicionarului
iniial, adic 4 2 3 3 2 1 (la a 12-a apariie n dicionar). Urmtorul simbol este a care, concatenat cu
d, conduce la modelul da care este n dicionar la poziia 6, aa c se citete urmtorul simbol, b,
obinnd modelul dab care nu este n dicionar i se include la poziia 12 i se ncepe un nou model
de la b. De asemenea, se codeaz da cu 6. Lungimea apariiilor n dicionar crete pe msur ce
are loc codarea. Cu ct apariiile n dicionar sunt mai lungi, cu att dicionarul capteaz mai mult
din structura secvenei. Dicionarul complet pentru codarea secvenei din exemplu este dat n
Tabelul 1.3.3.2.
Tabelul 1.3.3.2. Exemplu de dicionar complet pentru codarea LZW
35
Secvena codat este:
4 2 3 3 2 1 6 8 10 12 9 11 7 16 4 5 5 11 21 23 5
Decodarea. Se va decoda secvena anterioar, care este intrarea n decodor. Decodorul
pornete cu acelai dicionar iniial ca i codorul. Indexul 4 corespunde literei d, aa c se
decodeaz prima liter din secven i, pentru a simula codorul, se construiete urmtorul
element din dicionar, dup cum urmeaz: Se ncepe cu prima liter decodat d, care exist n
dicionar, aa c aceasta nu se mai adug. Urmtoarea intrare este 2, care corespunde lui a. Se
decodeaz a i se concateneaz cu d, pentru a forma da, al aselea element care se adaug n
dicionar. Urmtorul model va ncepe cu a. Urmtoarele patru intrri 3 3 2 1 corespund literelor
b b a b/ i genereaz modelele ab, bb, ba i ab/ care se trec n dicionar. Urmtoarea intrare este
6, care este indexul pentru da i, prin urmare, se decodeaz un d i un a. nti se concateneaz d
la modelul existent, b/ , i se formeaz b/ d. Cum acesta nu exist n dicionar, se introduce la
poziia 11. Noul model va ncepe cu d. Anterior s-a decodat a care, concatenat cu d, a dat da,
care este n dicionar, aa c se decodeaz urmtoarea intrare, care este 8, corespunztor lui bb.
Se decodeaz primul b i se concateneaz la modelul da pentru a obine dab, la poziia 12, apoi
se ncepe un nou model cu litera b. Decodnd al doilea b i concatenndu-l la noul model,
rezult modelul bb, care exist n dicionar, aa c se decodeaz urmtorul element din secven.
Procedeul se continu n mod similar, pn la decodarea ntregii secvene, pe baz
dicionarului construit artat n Tabelul 1.3.3.3.
Tabelul 1.3.3.3. Procedeul de decodare LZW
Index Apariie Index Apariie Index Apariie
1 b/ 9 a 18 abb
2 a 10 a b/ 19 ba b/ d
3 b 11 b/ d 20 uu
4 d 12 dab 21 uu
5 u 13 bba 22 u b/
6 da 14 a b/ d 23 b/ du
7 ab 15 dabb 24 uu b/
8 bb 16 ba b/ 25 b/ duu
17 bda
Decodorul LZW trebuie s conin o operaie de excepie pentru a rezolva cazul particular al
decodrii unui index care nu are o apariie complet n dicionarul decodorului [14].

Exemplu de codare LZW: MARIA ARE MERE
Tabelul 1.3.3.4. Exemplu de codare LZW [11]
36
a.
b.
c.
37
CAPITOLUL 2. COMPRESIA FIIERELOR DE UZ GENERAL
2.1 WinRAR
WinRAR este versiunea de 32 bii a arhivatorului RAR pentru Windows un instrument
puternic care permite de a crea, gestiona i controla fiierele arhivelor. Exist mai multe versiuni de
RAR, pentru diverse medii: Windows, Linux, FreeBSD, DOS, OS/2, MacOS X [18].
Exist dou versiuni de RAR pentru Windows :
- Versiune cu o interfa grafic WinRAR.exe;
- Versiune linie de comand (mod text) RAR.exe.
Caracteristicile aplicaiei WinRAR:
- Suport complet a arhivatorilor RAR i ZIP 2.0;
- Super-puternic, algoritm de compresie specific;
- Algoritmi speciali optimizai pentru compresia de texte, audio, grafice, execuii
32bii i 64 bii Intel.
- Interfa de mediu incluznd facilitatea de a rula-plasa i un asistent;
- Interfa pentru linia de comand;
- Gestionarea altor arhive dect RAR (7Z, ACE, ARJ, BZ2, CAB, GZ, ISO, JAR,
LZH, TAR, UUE, Z) ;
- Arhivare solid a crei rat de compresie e mrit de la 10% pn la 50% n raport
cu metodele obinuite. (O arhiv solid este o arhiv compact cu o metod special de
compresie, care prelucreaz toate fiierele n arhiv printr-un flux de date continuu.
Arhivele solide sunt suportate doar de formatul de arhivare RAR, aceast metod nu e
suportat de arhivele ZIP.);
- Arhive multivolum;
- Crearea arhivelor cu auto-extragere (chiar i multi-volum) utiliznd modulele SFX
prin eroare sau n opiune;
- Recuperarea arhivelor defectate;
- Recuperarea volumelor reconstruind prile lips a arhivelor multi-volum;
- Alte funcii de serviciu, precum criptarea, comentariile arhivelor, revista de erori, etc.
Numrul fiierelor ce poate fi adugat la o arhiv depinde de cantitatea memoriei disponibile i
de lungimea numelor fiierelor. Fiecare fiier arhivat ntr-o arhiv RAR consum aproximativ 128
octei din memorie. De exemplu, este recomandat de avut 128 Mo dac avei de compresat un
milion de fiiere. WinRAR a fost testat cu mai mult de 1 milion de fiiere.
38
Mrimea unei arhive RAR sau a unui fiier de arhivat ntr-o arhiv RAR, este limitat la 8 589
934 591 Go (9 223 372 036 854 775 807 octei). Remarcai c pentru a crea arhive mai mari de 4
Go, trebuie s utilizai NTFS, cci sistemele vechi nu suport fiiere aa mari.
Mrimea unei arhive ZIP sau a unui fiier de arhivat ntr-o arhiv ZIP, este limitat la 2 Go.
n general, formatul unei arhive RAR este cu mult mai performant pentru sarcini dificile ce
necesit un foarte mare numr de fiiere ce ocup muli giga-octei pe disc.
2.2 WinZIP
WinZip permite de a utiliza fiiere ZIP i alte formate de compresie beneficiind de utilizarea
flexibil a sistemului Windows [20].
Cteva din funcionalitile lui WinZip:
1. Integrare transparent n Windows: WinZip se integreaz perfect n postul de lucru i de
Exolorare Windows. E posibil de a utiliza funcia Ruleaz/Deplaseaz fiierului ntre WinZip i
Explorator sau de a compresa i a decompresa fiierele direct n Explorator.
2. Internet: WinZip integreaz o sarcin de formate de fiiere din cele mai curente de pe
Internet: RAR, BZ2, BZ, TBZ, TBZ2, TAR, gzip, UUencode, XXencode, BinHex et MIME. Mai
mult, programele externe asigur acceptarea fiierelor ARJ, LZH i ARC. WinZip permite accesul
practic la toate fiierele compresate i codate ce pot fi descrcate de pe Internet.
3. Instalarea automat a majoritii programelor soft distribuite n fiierele Zip: dac o
arhiv conine un program de configurare sau de instalare, funcia de instalare a WinZip permite de
a decompresa fiierele, de a lansa programul de instalare i de a terge fiierele temporare.
4. Asistent WinZip: aceast funcie ca opiune utilizeaz interfaa standard i familiar a
asistenilor pentru a simplifica compresia, decompresia i instalarea programelor distribuite sub
forma de arhive Zip. Asistentul WinZip se adreseaz utilizatorilor calculatoarelor personale care
descoper arhivele Zip, de asemenea i utilizatorilor ocazionali.
5. Dosarele preferate Zip: WinZip ofer posibilitatea de a organiza arhivele Zip sub forma
unei liste selectate pe dat, care faciliteaz localizarea lor, independent de locul lor de provenien
sau de destinaie. Spre deosebire de fereastra de dialog standard de Deschidere a arhivei, fereastra
de dialog Dosare Zip favorizeaz tratarea coninutului mai multor dosare ca i cnd ar fi un singur
dosar. O funcie de cutare permite localizarea tuturor arhivelor Zip mprtiate pe hard disc.
6. Suport extins de fiiere: WinZip preia formatul de fiier Zip &4bii, ceea ce elimin toate
restriciile practice legate de mrimea arhivelor, de asemenea si de numrul i mrimea fiierelor
compresate ntr-o arhiv. Capacitatea de arhivare nu este limitat dect de resursele sistemului.
39
7. Criptare avansat: tehnologia de criptare AES 128 bii i 256 bii a lui WinZip nu permite
consultarea neautorizat a coninutului documentelor.
8. Crearea de fiiere cu auto-extragere: WinZip Self-Extractor Ediie personal este
furnizat cu WinZip. Fiierele cu auto-extragere sunt idealul pentru a expedia fiiere compresate
cuiva care nu utilizeaz sau nu vrea sa utilizeze nici un program de compresie.
9. Zip i E-mail: WinZip permite compresia fiierelor sau a mapelor i de a le trimite, prin
pota electronic.
WinZip 11.1 este versiunea cea mai recent (WinZip 11.0) i e compatibil cu Windows
Vista. n afara funcionalitilor introduse n WinZip 11.0, WinZip 11.1:
este certificat pentru Windows Vista;
conine o bar de instrumente i de icon-uri de program Vista;
conine o interfa de stilul Explorator Vista;
este compatibil cu Windows Vista i XP 64 bii, de asemenea i cu Windows Vista,
XP i 2000 32 bii.
2.3. 7-Zip FILE MANAGER
7-Zip File Manager este un program pentru manipularea fiierelor i mapelor [15].
Tabelul 2.3.1. Formatele suportate (compatibile) ale aplicaiei 7-ZIP
Format Compressing Decompressing Filename Extensions
7z X X 7z
ZIP X X zip
GZIP X X gz gzip tgz
BZIP2 X X bz2 bzip2 tbz2 tbz
TAR X X tar
LZMA X lzma
RAR X rar
CAB X cab
ARJ X arj
Z X z taz
CPIO X cpio
RPM X rpm
DEB X deb
LZH X lzh lha
SPLIT X 001 002 ...
CHM X chm chw hxs
Continuarea tabelului 2.3.1.
40
ISO X iso
UDF X iso
COMPOUND X msi doc xls ppt
WIM X wim swm
DMG X dmg
XAR X xar
HFS X hfs
NSIS X exe
2.3.1. ZIP
7-Zip creeaz arhive compatibile n ntregime cu Zip. Oriicine poate decompresa aceste fiiere
cu orice aplicaie compatibil Zip de decompresie. Pe parcursul compresiei 7-Zip poate utiliza una
din urmtoarele metode de compresie Zip:
0 - Store
8 - Deflate
9 - Deflate64
12 - BZip2
Versiunea curent 7-Zip poate extrage orice fiier din arhiva Zip care sunt compresate cu una
din urmtoarele metode:
0 - Store
1 - Shrink
Implode
8 - Deflate
9 - Deflate64
12 - BZip2
Fiierele compresate cu alte metode de compresie Zip pot fi extrase de versiunea curent a lui 7-
Zip. Dar aceste metode suportate sunt mai populare, de aceea 7-Zip poate decompresa marea
majoritate a arhivelor Zip. Pentru a extrage fiiere compresate cu metode ce nu sunt suportate de 7-
Zip va trebui de utilizat aplicaii Zip.
7-Zip suport extensia Zip64 a formatului ZIP.
Versiunea curent 7-Zip nu susine arhivele Zip multi-volum.
LZH. 7-Zip e compatibil cu arhivele LZH doar pentru citire, vizualizare i decompresie. 7-Zip
accept metodele -lh0-, -lh4-, -lh5-, -lh6- i -lh7.
2.3.2. FORMATUL 7z
41
7z este un nou format de arhiv, asigurnd producerea unei rate nalte de compresie.
Principalele caracteristici ale formatului 7z:
Arhitecturi deschise
Rat nalt de compresie
Criptare puternic AES-256
Abilitate de a utiliza orice metod de compresie, conversie sau criptare
Suport fiiere cu mrimea de pn la 16000000000 GB
Fiiere cu nume Unicode
Compresie solid
Compresia header-ilor arhivelor
7z este o arhitectur deschis (cu acces liber), deci poate suporta orice metod nou de
compresie.
Tabelul 2.3.2.1. Metodele integrate curent n 7z
Metoda Descriere
LZMA Ameliorarea i optimizarea versiunii algoritmului LZ77
PPMD PPMdH creat de Dmitry Shkarin cu mici modificri
BCJ Convertor pentru 32-bit x86 executabil
BCJ2 Convertor pentru 32-bit x86 executabil
BZip2 Algorithm standard BWT
Deflate Algorithm standard bazat pe LZ77
2.3.3. LZMA
LZMA este metoda implicit i general de comprimare a formatului 7z.
Principalele caracteristici ale metodei LZMA:
Rat nalt de compresie
Mrime variabil a dicionarului (pn la 4 GB)
Vitez de compresie: n jur de 1 MB/s pe 2 GHz CPU
Vitez de decompresie: n jur de 10-20 MB/s pe 2 GHz CPU
Necesit volum mic de memorie pentru decompresie (depinde de mrimea dicionarului)
Mrime mic a codului de decompresie: n jur de 5 KB
Suport procese multiple i hiper-procese.
42
Algoritmul de compresie LZMA este foarte potrivit pentru aplicaii. Dac se dorete
utilizarea codului LZMA, se poate cere pentru consultare codul de program adaptat, i se poate cere
licene de developer de la www.7-zip.org/support.html.
2.4. POWER ARCHIVER 2009
PowerArchiver 2009 are o interfa modern i ergonomic si suport practic toate formatele de
compresie i de codare, de asemenea i multe instrumente i opiuni avansate. Se presupune c
PowerArchiver 2009 este programul de arhivare cel mai complet la ziua de azi [19].
PowerArchiver 2009 conine toate opiunile de baz ce sunt ateptate de la o aplicaie de
arhivare permite citirea i extragerea n mai multe formate, de asemenea i crearea arhivelor n
mai multe formate, n particular cu 7-zip care este cel mai puternic la momentul actual. Ceea ce
difereniaz PowerArchiver fa de aplicaiile similare ine de numeroasele sale opiuni. Mai simplu,
PowerArchiver este o aplicaie din cele mai inovatoare, i multe funcii ce opereaz n alte
programe soft au aprut cu PowerArchiver, ca extensia Shell, managerul parolei i codarea
avansat, convertorul de arhiv, instrumentul de extragere multipl, integrarea FTP, suportul
puternic SFX i multe alte instrumente ce faciliteaz sarcina pe tot parcursul aplicaiei. Nu este
gratuit aceast aplicaie.
2.5. COMPARAREA EFICIENEI PROGRAMELOR DE ARHIVARE
Numerele n tabela de mai jos sunt date n scopul de comparare i sunt aproximative[16]. Datele
n % sunt % de la dimensiunea fiierelor compresate n comparaie cu dimensiunea fiierelor
necompresate: cu ct procentul este mai mic, cu att mai bun e compresia.
Tabelul 2.5.1. Compararea eficienei programelor de arhivare
Name Text %
Text time
(s)
Binaries %
Binaries time
(s)
Raw images %
Raw images time
(s)
7-zip 19 18.8 27 59.6 50 36.4
bzip2 20 4.7 37 32.8 51 20.0
rar (2.01) 23 30.0 36 275.4 58 52.7
advzip 24 21.1 37 70.6 57 41.6
gzip 25 4.2 39 23.1 60 5.4
zip 25 4.3 39 23.3 60 5.7
43
CAPITOLUL 3. COMPRESIA FIIERELOR DIGITIZATE
3.1. COLECIILE DIGITALE O NOU POSIBILITATE DE ACCES LA
INFORMAIE
Barierele de spaiu i timp n cutarea informaiei au fost eliminate n era Internetului.
Obiectivul accesului universal la motenirea cultural poate fi ndeplinit dac avem n vedere
tehnologia actual care permite construirea coleciilor comprehensive.
n ziua de azi, majoritatea publicaiilor sunt scrise, corectate i aranjate n pagin cu ajutorul
calculatorului, cu procesoare de texte i programe de tehnoredactare. Chiar i versiunea tiprit are
la baza o versiune electronic. Exista numeroase publicaii electronice multimedia care grupeaz
diferite tipuri de informaie pe acelai suport, de exemplu o biografie, o bibliografie, fotografii,
imagini animate, video si sunet.
Resursele de informare ce sunt accesate intr-o bibliotec tradiional pot fi transpuse n formate
digitale stocate n depozite multimedia i fcute disponibile prin servicii web.
Resursele digitale pot fi mprite n doua mari categorii:
- documente care au fost publicate i exist deja pe suport material, ce au fost sau trebuie
digitizate, care formeaz patrimoniul cultural tiinific existent;
- documente care exist i/sau numai n format electronic (born digital- nscute electronic),
care se public n prezent i n form digital sau numai n form digital.
Deci publicaiile electronice pot fi publicaii electronice originale sau versiunea digitizat a unui
document scris sau tiprit.
Unii dintre productorii i editorii de publicaii electronice sunt editorii de publicaii clasice care
i diversific astfel activitatea. Exist i furnizori noi de informaii electronice care iau natere
special pentru a oferi asemenea documente. Este cazul editorilor de publicaii noi n web care nu se
gsesc dect on-line.
Tehnologia a ajuns n punctul n care sunt nu numai fezabile coleciile digitale, dar sunt mai
puin costisitoare dect cumprarea i stocarea versiunilor materiale, pe suport fizic - hrtie etc.
Conform definiiei din dicionarul ODLIS (Online Dictionary for Library and Information
Science) colecia digital este o colecie de documente dintr-o bibliotec sau arhiv convertite n
format citibil main (calculator) pentru conservare sau pentru a oferi acces electronic. Aceasta
include ziare electronice (e-zine), reviste electronice (e-journals), cri electronice (e-book), lucrri
de referin, baze de date bibliografice, alte resurse web.
Bibliotecile digitale au diverse definiii care cuprind att documente tiprite care devin
accesibile electronic prin transformarea lor n format digital, prin digitizare, ct i materiale nscute
44
n format electronic-digital. Convenional, exista dou posibiliti: o bibliotec care conine material
n form digitizat i o bibliotec care conine material digital.
Bibliotecile digitale trebuie s se integreze i s extind bibliotecile tradiionale. Ele trebuie s
fie mai mult dect portaluri cu motoare de cutare. Ca orice bibliotec, trebuie s ofere posibiliti
de selecie a resurselor care ndeplinesc criteriile relevante misiunilor sale i trebuie s ofere
servicii, inclusiv de cutare, care s faciliteze utilizarea resurselor de ctre comunitatea int.
Trebuie sa fie colaborativ, permind utilizatorilor s contribuie activ cu cunotine, fie prin
adnotri, review-uri (referate, articole de sintez), sau pasiv oferind doar posibilitatea de acces la
resurse. n plus, trebuie s fie contextual, exprimnd extinderea web-ului inter-relaional i a
nivelelor de cunotine care se extind de-a lungul resurselor primare.
Datorit crerii bibliotecilor digitale, cercetrile universitare s-au accelerat dramatic, fr a mai
exista limitarea accesului la documentul fizic. n aproape toate bibliotecile, digitizarea este
considerat ca o expunere a coleciilor sub o alta nfiare, ce asigur o funcionalitate mrit,
comoditate - posibilitatea accesului la documente de acas, anumite considerente legate de
conservare, agregarea coleciilor care sunt dispersate fizic i o considerabil extindere a accesului.
ncepnd din anii 90, o activitate experimentat pe scar larg a fost aceea de a concepe proiecte
de realizare a bibliotecii digitale, n special n SUA. Este perioada primei generaii a bibliotecilor
digitale. Cheltuielile fcute n ultimii 10 ani pentru biblioteci digitale a depit cteva sute de
milioane de dolari. Unele fonduri pentru cercetarea n acest domeniu au provenit de la diverse
organizaii guvernamentale, ca de exemplu n SUA, de la Digital Library Initiatives (DLI).
n 1994, Library of Congress anun planul sau de a crea National Digital Library, iar National
Science Foundation (NSF) alturi de National Aeronautics and Space Administration (NASA) i
Defence Advanced Research Projects Agency (DARPA) anun c sprijin Digital Libraries
Initiative, un efort de cercetare n care erau implicate cteva mari universiti pentru a studia
bibliotecile digitale. Scopul era de a oferi acces universal la motenirea cultural.
Cele mai importante progrese n ceea ce privete tehnicile implicate n asemenea proiecte au
fost fcute prin intermediul cercetrilor sponsorizate de U.S. National Science Foundation (NSF) i
U.K. Joint Information Systems Committee (JISC). n 1999, aceste proiecte au nceput sa se extind
internaional, cnd NSF a legat programul su de cercetare n biblioteca digital de activitile
similare desfurate de JISC, rezultnd JISCNSF International Digital Library Initiative.
Obiectivele acestui program de 3 ani a fost:
- adunarea coleciilor de informaii care nu sunt accesibile sau utilizabile altfel, din cauza
barierelor tehnice, distanei, mrimii, structurii fragmentare sau alte limitri;
45
- crearea noii tehnologii i punerea informaiei la dispoziia unui set de utilizatori distribuii,
pentru ca aceasta s fie furnizat i exploatat;
- evaluarea impactului noii tehnologii i a beneficiilor sale internaionale.
Numeroase instituii, organisme, organizaii, grupuri s-au implicat n dezvoltarea tehnicii i
tehnologiei digitale, inclusiv Uniunea European, Association for Computing Machinery (ACM),
Institute of Electrical and Electronics Engineers (IEEE), International Federation of Library
Associations (IFLA), American Library Association (ALA), Coalition for Networked Information
(CNI) i Digital Library Federation (DLF).
Aproape toate bibliotecile i declara intenia de a conserva nlocuitorii digitali pe care i
creeaz, iar Biblioteca Congresului s-a angajat i la conservarea nlocuitorilor creai de alte
biblioteci, sub auspiciile programului Bibliotecii Digitale Naionale. Din ce n ce mai multe
universiti i-au pus problema legat de scholarly communication, adic crearea, publicarea i
accesul la informaia academic, colar, curent, care trece printr-o serioas criz.
Conform ACRL (Association of College & Research Libraries), scholarly communication
este sistemul prin care cercetrile i alte scrieri academice sunt create, evaluate din punct de vedere
al calitii rspndite n comunitatea academic i conservate pentru utilizri viitoare. Una din
caracteristicile de baz ale acestor cercetri este ca sunt create ca bunuri publice pentru a facilita
cercetarea i cunoaterea. Criza actual n acest domeniu are la baz faptul c firmele comerciale au
preluat controlul asupra revistelor academice din domeniul tiinific, tehnic i medical.
Industria publicrii acestor reviste s-a consolidat i este dominat de un numr mic de companii
internaionale. De aceea, preul revistelor a crescut foarte mult, bibliotecile au fost nevoite sa reduc
numrul titlurilor abonate sau crilor cumprate. n plus, a crescut i cantitatea informaiei
academice. Toate acestea au avut ca efect reducerea accesului la nvmnt. Au aprut o serie de
preocupri de rezolvare a acestei crize, iar n acest sens ACRL a definit o serie de principii si
strategii pentru a reforma comunicarea tiinific (Principles and Strategies for the Reform of
Scholarly Communication). Din ce n ce mai mult, aceast informaie este pus la dispoziia
cercettorilor, profesorilor i studenilor n format electronic.
Marile companii care au un cuvnt de spus n industria calculatoarelor sau a Internetului au
demarat la concuren o serie de proiecte mpreun cu marile biblioteci ale lumii. Compania Google
lucreaz, n cadrul Google Print Library Project, la scanarea coleciilor University of Michigan,
Harvard University, Stanford University, The New York Public Library i Oxford University.
Intenia era de a face aceste cri regsibile prin Google.
Google a anunat sponsorizarea proiectului World Digital Library (WDL) al Bibliotecii
Congresului. i n Europa exist preocupri pentru realizarea resurselor digitale. Astfel, site-ul
46
European Library i propune s fie un portal al bibliotecilor naionale europene i gzduiete
proiectul European Digital Library Treasures (http://www.theeuropeanlibrary.org/portal/index.
htm), unde se prezint cteva din documentele de patrimoniu ale acestora.
n martie 2005, Parlamentul European a aprobat programul eContentplus
(http://europa.eu.int/information_society/activities/econtentplus/index_en.htm), un program
multianual care dorete s fac coninutul digital al Europei mai accesibil, mai utilizabil i mai
exploatat. Va suporta coninut multilingv i un serviciu on-line n Europa. Programul se adreseaz
unei zone specifice a pieei care se dezvolt mai ncet i anume coninutul geografic, ca i
component al coninutului sectorului public, coninutul educaional, cultural, tiinific i colar.
Programul sprijin coordonarea larg european a coleciilor din biblioteci, muzee, arhive i
conservarea, pstrarea coleciilor digitale ca s asigure utilizarea viitoare a bunurilor colare
culturale i tiinifice.
n marile universiti ale lumii i n din ce n ce mai multe universiti chiar i din Europa,
universitile public documentele destinate nvmntului n format electronic. Materialele
destinate studenilor sunt accesibile pe baza de parole, n format electronic. Se dau examene prin
Internet, e-learning -ul este o realitate.
Biblioteci digitale locale, realizate de universiti, institute de cercetare etc. sunt formate din
resurse electronice ca:
- e-books - cri full text (ale profesorilor, cercettorilor)
- materiale didactice (cursuri, laboratoare, caiete de seminar, teste, ntrebri-rspunsuri)
- articole de cercetare (preprinturi)
- reviste tiinifice
- conferine, congrese, seminarii
- anunuri, programe, lucrrile lor, prezentri, postere etc.
- date de cercetare ale unor contracte de cercetare
- nregistrri audio, video (ale marilor personaliti din institutele respective)
- colecii de imagini foto, desene, scheme etc.
n procesul de cercetare tiinific, informaia este resursa inestimabil care ajut la progresul
omenirii. n acest proces, oamenii de tiin se bazeaz pe surse de informare deja existente,
produse de omenire, dar, la rndul lor, produc documente ce pot contribui la progresul tiinei, la
informarea altor cercettori, profesori, studeni.
Apariia bibliotecii digitale reflect dezvoltarea nvmntului la distan (e-learning),
alternativa virtual a colii tradiionale. Populaia studeneasc este tot mai mult ndeprtat de
campusul universitar pentru o alternativa de e-learning de-a lungul vieii (life long learning).
47
Biblioteca trebuie s se dezvolte astfel ca s rspund noii paradigme educaionale pe msur ce
cititorii caut noi cai pentru a regsi mai uor resursele de informare oriunde i oricnd. Se impune
stabilirea rolurilor, responsabilitilor bibliotecilor i ale altor instituii n furnizarea accesului
publicului la acest noua tip de informaie - informaia digital [7].
3.2. FORMATELE UZUALE ALE FIIERELOR SCANATE
Formatul n care o imagine scanat este salvat poate avea un efect semnificativ, iar mrimea
fiierului are o importan deosebit, daca inem cont de rezoluia scannerelor moderne, care pot
crea un fiier imagine pentru un format A4 de 30 MB.
Formate de tip imagine
Cnd captm o imagine cu un aparat foto sau cu un scanner, aceasta trebuie memorat ntr-un
format de fiier. Dac informaia binar este privit ca vehicul de comunicare, formatul de fiier
poate fi asemuit cu limbajul, sau vehiculul acestei comunicri. Informaia poate fi citit i neleas
numai dac programul recunoate formatul respectiv. Imaginile pot fi salvate n diverse formate.
Cele mai frecvent utilizate sunt:
- .jpg Joint Photographic Experts Group
- .tif Tagged Image File Format
- .psd Photoshop Document
- .gif Graphics Interchange Format.
JPEG - Standardul Industrial pentru compresia imaginilor fotografice cu tonuri continue,
pregtite pentru a fi afiate pe World Wide Web sau pentru a fi stocate atunci cnd spaiul este
limitat.
Formatul JPEG folosete o compresie cu pierderi (datele i calitatea imaginii sunt sacrificate
pentru a obine fiiere mai mici atunci cnd fiierele-imagine sunt nchise). Utilizatorul poate
controla valoarea compresiei. Un nivel ridicat de compresie rezult ntr-o calitate mai mic a
imaginii i un fiier de dimensiuni mai mici. Un grad sczut de compresie conduce la imagini de
calitate mai bun, dar fiierul este mai mare. Se recomand de folosit formatul de fiier JPEG numai
dup ce se finiseaz de editat imaginea.
TIFF - standardul industrial pentru imaginile destinate publicrii (reviste, cri etc.) utilizeaz o
tehnica de compresie fr pierderi (nu se pierd date i nu scade calitatea imaginii) numit
compresie LZW. Dei pstreaz calitatea imaginii, tehnica LZW comprim doar n mic msur o
imagine.
Photoshop - un format standard utilizat de majoritatea programelor de prelucrare a imaginii. O
imagine compus din straturi (layers) poate fi salvat ca document Photoshop. Un document
48
Photoshop este pstrat, de obicei, ca fiier de referin, din care deriva toate celelalte fiiere, n
funcie de necesitile impuse de dispozitivul de afiare.
Imaginea de fereastr (BMP - Windows bitmap) este cea mai mare, deoarece imaginea este
nregistrat cu toate culorile fr compresia acestora sau n 256 culori prin-o simpl comprimare a
codurilor de rulare. n cele mai multe cazuri trebuie evitat acest format.
Formatul GIF nregistreaz imagini folosind culoarea indexat. 256 de culori sunt disponibile n
fiecare imagine. Un tabel al valorilor RGB pentru fiecare index al culorilor este nregistrat n
fiierul imagine. GIF este mai mic dect alte formate de fiier, deoarece intensitatea culorii este
sczut, fcnd o alegere bun n folosirea materialului pe Internet.
Trecerea de la formatul de tip imagine la formatul text se face cu ajutorul unui program de
recunoatere de text. Unul dintre cele mai prietenoase, eficiente i folosite programe de
recunoatere de text este Abby Finereader.
Jaws for Windows este cel mai popular cititor de ecran pentru nevztori. El permite acestora sa
foloseasc computerul n scopuri variate, de la instrument de lucru la locul de munca la mijloc de
recreare sau comunicare cu alii.
n ceea ce privete stocarea documentelor i compresia acestora se prefer utilizarea
programului DjVu i a formatului PDF.
DjVu este o tehnologie de compresie a imaginilor optimizat pentru documentele scanate.
Crile n acest format sunt de 3 pn la 8 ori mai mici dect echivalentul lor PDF.
Tehnologiile electronice actuale permit ca aceleai operaii de stocare i transmitere a
informaiei s asigure o mai buna operativitate, flexibilitate, accesibilitate, adresabilitate, un mai
bun raport cantitate de informaie transmis/pre. Suporturile de difuzare sunt CD-uri, dischete sau
Internetul, fiecare dintre ei avnd costuri foarte mici n raport cu hrtia tiprit.
Problemele privind depozitarea materialelor conservate i prezervate digital sunt similare cu
cele privind digitizarea i ridic semne de ntrebare n ceea ce privete situaiile financiare,
organizaionale, tehnice i legale [10].
3.3. DjVu: UN SISTEM DE COMPRESIE TIP IMAGINE PENTRU DISTRIBUIREA
DOCUMENTELOR NUMERICE
Un fiier DjVu reprezint o pagin tipic a unei reviste n culori, scanat cu 300 dpi (dots per
inch) ce necesit 40-80 KB. Una din ideile eseniale ale tehnologiei de compresie DjVu const n
descompunerea imaginii ntr-un prim-plan ce conine obiecte delimitate cu contururi evideniate
(text, figuri, scheme) i un fundal ce conine restul imaginii (fotografii, textura paginii). Pentru
compresia fiecrui plan pot fi utilizate diferite tehnici. Metodele uzuale de compresie a imaginilor
sunt concepute fie pentru imagini naturale coninnd puine contururi (JPEG), fie imagini pentru
49
documente alb-negru, n ntregime compuse din contururi puternic evideniate (Group 3,
MMR/Group 4
1
, i JBIG). Sistemul DjVu integreaz dou noi tehnici: JB2 i IW44 pentru a
codifica diverse planuri [3].
Figura 3.3.1. Divizarea prim-plan/fundal [2]
Algoritmul de separare prim-plan/fundal produce 3 ieiri: o masc n dou nuane de rezoluie
nalt (n general de 300 dpi), o imagine color reprezentnd fundalul cu o rezoluie medie (n
general de 100 dpi), i o structur care codific culoarea obiectelor din prim-plan. Dac un pixel al
mtii este zero, pixelul ce corespunde imaginii reconstruite ia culoarea extras a imaginii de fundal
n locul corespunztor, daca nu - ia o culoare definit de prim-plan.
Masca este codificat cu un nou algoritm de imagine n dou nuane, numit JB2, care este de
fapt un descendent al propunerii originale a AT&T pentru standardul JBIG-2. algoritmul consta n
identificarea formelor individuale care compun imaginea i de a le grupa n categorii similare.
Formele reprezentative a fiecrei clase sunt codificate utiliznd o metod similar standardului
JBIG. Fiecare pixel al formei este codificat cu ajutorul unei tehnici de codificare aritmetic adaptiv
numit ZP-Coder. Codificatorul aritmetic utilizeaz un context format de pixelii vecini transmii
1
Un set de standarde pentru fax publicat de ITU-T n 1984. Grupa IV, faxuri extrem de specializate i relativ scumpe
pentru sisteme computaionale concepute s utilizeze circuite digitale n vederea mbuntirii calitii i a vitezei de
transmitere, de la 64 kbps. Grupa IV, faxuri, de asemenea, este compatibil cu grupa III i se poate conecta la circuite
analogice.
50
deja pentru a prezice valoarea pixelului ce trebuie codificat, i pentru a transmite valoarea sa
utiliznd un numr optimal de bii. Formele, altele dect prototipul ce aparine unei clase sunt
codificate utiliznd un context mrit care include valoarea pixelilor formei prototipului. Aceasta
strategie reduce numrul de bii utilizai, deoarece majoritatea pixelilor sunt similari pixelilor
formei prototipului. Foarte rar se cere reconstruirea exact a imaginii originale, de aceea ratele de
compresie pot fi semnificativ mrite nlocuind aceste forme cu forma prototipului a cror diferene
sunt suficient de slabe pentru a fi sesizate. Poziiile n care trebuie s fie afiate formele n imagine
sunt, de asemenea, codificate aritmetic. Codificatorul adaptiv ZP-Coder este foarte rapid i
furnizeaz rate de compresie medii situate cu aproximare de 5% fa de limita teoretic a lui
Shannon. n cazul cnd documentul conine mai multe pagini, este avantajos de a construi un
dicionar cu forme prototip partajate ntre pagini, i un dicionar propriu fiecrei pagini care conine
forme care nu apar dect n pagina considerat. JB2 utilizeaz o metod foarte rapid pentru a face
aceasta.
Pentru imaginea de fundal, DjVu utilizeaz un algoritm de compresie wavelet, numit IW44,
care prezint mai multe avantaje importante fa de alte metode de compresie a imaginii naturale. n
primul rnd, IW44 utilizeaz o transformat wavelet bazat pe metoda de lifting care e foarte
rapid
2
. n al doilea rnd aceast transformat este implementat n aa mod nct ea necesit
multiplicare, bazndu-se exclusiv pe adugri i decalaje. Aceasta reduce mult timpul de calcul. n
al treilea rnd, structura datelor interne a imaginilor IW44 permite ameliorarea progresiv a
coeficienilor wavelet pe msura recepiei lor, utiliznd o cantitate de memorie proporional
numrului de coeficieni ne nuli (i nu a numrului de pixeli). Aceast structur de date permite, n
orice moment, n timpul sau dup transmitere, de a reconstrui un segment oarecare al imaginii, cu o
rezoluie oarecare. Aceasta permite de a reconstrui doar o parte a imaginii afiate la ecran. n sfrit,
tehnica de mascare prin proiectri succesive permite evitarea cheltuielilor de bii pentru codificarea
regiunilor de pe fundal care sunt invizibile cci sunt acoperite de obiectele situate n prim-plan.
Algoritmul IW44 utilizeaz de asemenea ZP-Coder pentru codificarea final a datelor.
Culoarea obiectelor din prim-plan poate fi codificat prin dou metode diferite. Prima metod
const din identificarea unei culori unice pentru fiecare form ce apare n masc, i a o codifica cu
ajutorul lui ZP-Coder. Aceasta furnizeaz un cod foarte compact, dar necesit o segmentare aproape
perfect, i nu funcioneaz dect dac componentele din prim-plan sunt uniform colorate. A doua
metod const n utilizarea IW44 pentru codificarea unei imagini de rezoluie foarte joas (n
general de 25 dpi sau 1 p/mm). Interpretarea imaginii din prim-plan este exact simetric celei de pe
2
Bell (T.C), Clearz (J.G.) et Witten (I.H), Text Compression, Prentice-Hall, 1990.
51
fundal: masca utilizeaz de baz canalul Alpha pentru a mixa imaginile de pe fundal i cele din
prim-plan. A doua metod este similar sugestiilor standardului MRC-T.44
3
.
3.3.1. ALGORITMUL DE SEGMENTARE
Prima faz de segmentare prim-plan/fundal e bazat pe Cmpul Markov Causa bidimensional, a
crui stri reprezint prim-planul i fundalul. Fiecare stare descrie local distribuirea pixelilor din
prim-plan sau fundal cu ajutorul unei gaussiene unice determinat de culoarea medie a pixelilor i
variaiile lor.
Aceast faz iniial realizeaz de fapt o pre-segmentare pentru a selecta toate obiectele care ar
putea merita sa fie codificate n prim-plan. Drept consecin, unele pri de contrast evideniat ale
fotografiilor sau unele urme (linii) ale imprimantei pot fi referite incorect categoriei obiectelor din
prim-plan. O succesiune de filtre euristice sunt apoi aplicate pentru a exclude obiectele care din
greeal au fost clasificate pentru prim-plan [3].
Figura 3.3.1.1. Proieciile succesive converg ctre un punct de intersecie a dou subspaii
convexe reprezentnd (a) imagini de potrivire a imaginii iniiale n afara mtii, i (b) imagini
ale cror coeficieni mascai wavelet sunt zero
4
.
Criteriile deciziilor implementate de ctre filtrul principal sunt bazate pe principiul Lungimii
Minimale a Descrierii (Minimum Description Length
5
). Acest principiu permite minimizarea
numrului de parametrii euristici pentru optimizarea manual comparnd sute de imagini de diferite
tipuri. Este suficient de tiut dac se prefer de codificat fiecare candidat ca obiect din prim-plan
sau de pe fundal. Costul codificrii asociat fiecrei posibiliti este obinut adugnd costul
codificrii parametrilor unui model generativ al imaginii compresate i costul resturilor ce permit
3
Bazer (B.E.), An optimum method for two level rendition of continuous-tone pictures. In: Internal Conference on
Communications 1973.
4
Lon Bottou, Patrick Haffner, Paul G. Howard, Patrice Simard, Yoshua Bengio and Yann LeCun, High Quality
Document Image Compression with DjVu, AT&T Labs, Lincroft, NJ, July 13, 1998
5
W. Niblack, J.Sheinvald, B. Dom and D. Steele, Unsupervised image segmentation using the minimum description
length principle. In Proceedings of ICPR 92, 1992
52
reconstruirea imaginii iniiale. Posibilitatea ce prezint costul codificrii minime este reinut.
Codificarea unui candidat pe fundal necesit un model al imaginii de pe fundal. Codificarea unui
candidat ca obiect din prim-plan necesit un model al imaginii din prim-plan, un model al imaginii
de pe fundal situat sub obiectul din prim-plan i un model al imaginii masc.
Modelul reinut pentru imaginea de pe fundal presupune c culoarea fiecrui pixel este o medie
a pixelilor celor mai apropiai de pe fundal de deasupra i din partea stng a pixelului. Modelul
reinut pentru imaginea din prim-plan presupune o culoare uniform pentru obiect. Costul
codificrii asociate modelului mtii este evaluat euristic pornind de la lungimea perimetrului
obiectului candidat. Modelul de pe fundal autorizeaz variaiile continue caracteristice zonelor pe
care dorim s le conservm pe fundal. Modelul din prim-plan favorizeaz obiectele bine mrginite
de culoare uniform.
Cu toate ca s-ar putea dori modele ce ar reproduce mai fin caracteristicile algoritmilor de
codificare utilizai de DjVu, aceste trei modele ofer un bon compromis ntre timpul de execuie i
calitatea segmentrii. Segmentarea complet a unei imagini color de 300 dpi (pagina unei reviste de
exemplu) are loc n aproximativ 3 secunde.
3.4. EFICIENA TEHNICII DE COMPRESIEI DjVu
Dj vu a fost de la nceput conceput pentru a stoca imagini scanate coninnd texte sau desene
liniare. Tehnologia sa permite separarea textului de fundal, ncrcare progresiv etc. Diferena ntre
DjVu i PDF vizeaz n principal faptul c DjVu este de tip raster, iar PDF de tip vector. Acest
lucru nseamn c un text n PDF poate fi mrit orict fr alterarea calitii, n timp ce mrirea
DjVu este limitat.
Trebuie de remarcat faptul c DjVu este un format proprietate i realizarea de fiiere DjVu nu se
poate realiza dect cu aplicaia productorului, pe cnd PDF este format standardizat, nu este
dependent de proprietar i este uor de realizat chiar prin aplicaii gratuite.
53

3.1sec/23k: masca (text, 23K) s-a ncrcat 4.8sec/35K: fundalul e nc neclar
9.4sec/67K: ncrcarea s-a terminat.
Figura 3.4. Descrcarea fiierului printr-un modem de 56 K: decompresia progresiv mai
nti a textului, apoi a fundalului cu o cretere continu a calitii [2]
54
3.4.1. REZULTATE: IW44 PENTRU IMAGINI NATURALE
Performana lui IW44 este tipic algoritmilor de compresie wavelet a imaginilor, dar a fost
optimizat pentru accelerarea vitezei de decodificare i minimizarea memoriei utilizate, mai mult
dect pentru maximizarea compresiei. Spaiul ocupat de o imagine IW44 este n general de la 30%
pn la 50% mai mic dect cel al unei imagini JPEG la acelai raport semnal/zgomot.
Tabelul 3.4.1.1. prezint raporturile semnal/zgomot obinute cu IW44 pentru dou imagini test
standard (lena i goldhill), le compar cu JPEG i cu alte metode wavelet: EZW, SPIHT i EBCOT.
Pentru imaginea Lena, IW44 depete JPEG cu aproximativ 2 dB. IW44 depete de
asemenea EZW, dar este cu puin mai puin optimal fa de SPIHT i EBCOT. Aceasta e cauzat de
faptul c arhitectura lui IW44 i filtrele de und utilizate sunt optimizate n aa fel nct s se obin
o accelerare a vitezei de decodare.
Tabelul 3.4.1.1. Raportul semnal/zgomot obinut cu diferite metode de compresie
Imagine IW44 JPEG EZW SPIHT EBCOT
Lena
Lena
Lena
33.62
36.61
39.67
31.67
34.84
37.94
33.17
36.28
39.55
34.11
37.21
40.46
34.28
37.43
40.61
Goldhill
Goldhill
30.25
32.56
29.23
31.03
n/a
n/a
30.56
33.12
n/a
n/a
3.4.2. REZULTATE: JB2 PENTRU IMAGINI N DOU NUANE
Un test independent de compresie fr pierdere al imaginilor alb-negru efectuat pe o larg
colecie de documente a msurat rata medie de compresie de 26.5 pentru JB2 v2.0. aceasta poate fi
comparat cu rate de 13.5 obinut pentru MMR/Group 4 i 19.4 pentru JBIG. Ctiguri mai
importante pentru imaginile ce conin mult text i mai mici pentru imaginile ce conin mai multe
desene.
Tabelele 3.4.2.1.- 3.4.2.4. prezint rezultatele obinute de DjVu n dou nuane i le compar cu
MMR
6
/CCITT
7
-GroupIV. Ratele obinute de DjVu v3.0. utilizat pentru mai multe pagini cu
dicionar partajat sunt de 4.5 la 10 ori mai superioare dect MMR/G4. Mrimea medie a unei pagini
este de la 5 pn la 11 kilo-octei, n funcie de document.
Utiliznd formatul PDF pentru documente alb-negru scanate obinem mrimi similare ca
MMR/G4, deoarece PDF nu face dect ncapsularea documentului MMR/G4 ntr-un format PDF.
Primele 6 documente din tabel sunt brevete. Documentul Nisp10 este n mod deosebit
interesant, cci este caracteristic unei publicaii tiinifice tipice. Avnd 1090 pagini, fiierul
6
Modified Modified READ (MMR; READ Relative Element Address Designate codes) dezvoltat pentru a sprijini
utilizarea internaional a faxurilor, adic, "Grupul 4 aparate de fax".
7
Standard dezvoltat de ITU (International Telecommunication Union) n 1984-85 n grupul filial numit apoi The
International Telegraph and Telephone Consultative Committee (CCITT) i azi cunoscut ca ITU-T (International
Telecommunication Union-Telecommunication Standardization Sector).
55
TIFF/G4 (sau echivalentul su PDF) are mrimea de aproximativ 76 MB, n DjVu el este redus la
13MB. Mrimea medie a unei pagini este de aproximativ 10KB, ceea ce permite prevederea unei
stocri a 60000 de pagini pe un CD-ROM (aproximativ 50 de volume de acest tip).
Fiierul Snowbird este diferit de celelalte prin faptul c el nu a fost digitalizat de pe hrtie, dar
convertit direct de la un fiier PostScript. Convertit n TIFF/G4 el ocup 10.7 MB, compresat cu
DjVu cu dicionar partajat, el este redus la 728 KB [3].
Tabelul 3.4.2.1. Comparaii ntre MMR/G4 i JB2 dup mrimea fiierelor
Tabelul 3.4.2.2. Comparaii ntre MMR/G4 i JB2 dup rata de compresie
Tabelul 3.4.2.3. Rata de compresie a JB2 n raport cu rata de compresie relativ a G4
56
Tabelul 3.4.2.4. Comparaii ntre MMR/G4 i JB2 dup mrimea medie a unei pagini
3.4.3. REZULTATE: DjVu PENTRU DOCUMENTELE COLOR
La compresia unui document n culori, sistemul DjVu cu separarea prim-plan/fundal ajunge la
rate de 300:1 i 1000:1. Tabelul 3.4.3.1. arat mrimile fiierelor DjVu corespunztoare unor
documente digitalizate n culori cu 300 dpi. Documentele obinuite ocup ntre 30KB i 80 KB.
Tabelul 3.4.3.1. Mrimea fiierelor (n KB) obinute la digitizare utiliznd diferii algoritmi
Tabelul 3.4.3.2. Rezultatele compresiei utiliznd diferii algoritmi [2]
57
Descrierea
imaginii
Detaliul
imaginii
neprelucrat
JPEG,
300 dpi,
quality 20
JPEG,
100dpi,
size=DjVu
IW44,
300dpi,
size=DjVu
DjVu
compressed
Magazine Add
% image= 56
ads-freehand-300
20640K 292K 70:1 50K 412:1 61K 338:1 52K 396:1
Brattain Notebook
% image= 22
brattain-0001
9534K 116K 82:1 17K 560:1 20K 476:1 19K 501:1
Scientific Article
% image= 46
graham-001
22013K 383K 57:1 41K 536:1 43K 511:1 38K 579:1
Newspaper Article
% image= 50
lrr-wpost-1
12990K 250K 51:1 38K 341:1 42K 309:1 40K 324:1
Cross-Section of
Jupiter
% image= 73
planets-jupiter
24405K 284K 85:1 47K 519:1 52K 469:1 47K 519:1
XVIIIth Century
book
% image= 45
cuisine-p006
12128K 206K 58:1 35K 346:1 39K 310:1 37K 327:1
US First
Amendment
% image= 30
usa-amend1 31059K 388K 80:1 77K 403:1 78K 398:1 73K 425:1
Pornind de la o imagine a unui document de 300 dpi i 24bits/pixel, segmentarea produce trei sub-
imagini: masca n dou nuane (1bit/pixel) care este de 24 de ori mai mic dect imaginea original,
imaginea de pe fundal (100dpi) este de 3 x 3 = 9 ori mai mic, imaginea din prim-plan (25 dpi) este
de 12 x 12 =144 ori mai mic dect originalul. Adunnd mrimile necompresate ale acestor sub-
imagini, obinem o rat de compresie de 6.25:1 n raport cu imaginea original.
Un mare numr de exemple pot fi consultate on-line din biblioteca digital DjVu la adresa
http://www.djvu.org.
58
CAPITOLUL 4. IMPLEMENTRI PRACTICE
4.1. ALGORITMUL HUFFMAN STATIC (ALGORITM ENTROPIC)
Algoritmul Huffman ia ca intrare o lista de ponderi ne-negative {w(1), ... ,w(n) } i
construiete un arbore binar complet (un arbore binar este complet daca fiecare nod are zero sau 2
ramificaii), ale crui frunze sunt numerotate cu ponderi. Ponderile reprezint probabilitile
asociate simbolurilor sursei. Iniial arborele are numai doua noduri, cele corespunztoare ponderilor
celor mai mici. La fiecare pas n algoritm, cele mai mici ponderi definesc un nou nod cu ponderea
w(i)+w(j) i a crui rdcina (root) are doi sub-arbori, reprezentai de w(i) si w(j). Ponderile w(i) si
w(j) sunt indepartate din lista i locul lor este preluat de w(i)+w(j). Procesul continua pn cnd se
obine o list cu o singur valoare [9].
Observaii:
Pentru marcarea sfritului de mesaj comprimat se folosete un simbol auxiliar cu semnificaie
de sfrit de mesaj comprimat. Fie acesta END. In acest fel, numrul total de simboluri ce trebuie
reprezentate este: 256 (de la codul ASCII) + 1 (pentru END). Rezult un numr de 257 simboluri
pentru care este nevoie de k >= log
2
257 = 8.005 -> 9 simboluri binare.
Simbolul END codificat binar pe 9 bii este: 1.0000.0000. Pentru a obine coduri pe 9
simboluri binare pentru caracterele ce au cod ASCII, se va pune un 0 n faa codului ASCII pe 8
bii. De exemplu, codul ASCII al lui A este 41H = 0100.0001 iar codul binar pe 9 bii va fi
0.0100.0001.
Pentru codarea arborelui se parcurge arborele de sus n jos i, apoi, de la stnga la dreapta prin
scrierea tuturor nodurilor, astfel:
- daca nodul nu este frunz (nod terminal) atunci se scrie 0 altfel 1;
- daca nodul este frunz se scrie, apoi, codul simbolului corespunztor nodului
considerat;
Exist mai multe soluii de a parcurge sigur un astfel de arbore:
1. Odat considerat un nod se taie cu un X;
2. La considerarea unui nod care nu este terminal se considera c de fapt au aprut dou
noduri fii: unul spre stnga i unul spre dreapta.
3. Se consider un traseu de parcurgere al grafului, aa cum este prezentat n figura de mai jos,
i se scriu numai nodurile corespunztoare pantei negative a traseului.
4. La codificarea mesajului, la sfritul mesajului, se pune codul lui END rezultat din arborele
de codare, delimitndu-se astfel sfritul mesajului codat.
5. La codarea arborelui se pot folosi dou metode de evideniere a sfritului codului arborelui:
59
- S se foreze ca simbolul END sa fie tot timpul ultimul caracter din dreapta al grafului de
codare. La apariia codului acestuia, bin(END,9) se decide ca s-a terminat de scris arborele;
- Pentru arbore se definete, n mod normal, o structur de date cu trei cmpuri: nod i cei doi
fii. Dup scrierea valorilor unui fiu, mai devreme sau mai trziu, se va citi i nodul pereche,
astfel nct, se poate calcula a priori numrul de valori ce trebuie scrise pentru a parcurge n
mod independent arborele de codare.
4.1.1. CODUL SURS AL ALGORITMULUI HUFFMAN N VISUAL C++
//Building the Tree in encoding
void En_Decode::BuildHufTree()
{
int NodeCounter = 256;
int i;
for (i = 0; i < NodeCounter; i++)
{
OurTree[i].parent = -1;
OurTree[i].right = -1;
OurTree[i].left = -1;
}
while (1)
{
int MinFreq0 = -1;
int MinFreq1 = -1;
for (i = 0; i < NodeCounter; i++)
{
if (i != MinFreq0)
{
if (OurTree[i].freq > 0 && OurTree[i].parent == -1)
{
if (MinFreq0 == -1 || OurTree[i].freq < OurTree[MinFreq0].freq)
{
if (MinFreq1 == -1 || OurTree[i].freq < OurTree[MinFreq1].freq)
MinFreq1 = MinFreq0;
MinFreq0 = i;
60
}
else if (MinFreq1 == -1 || OurTree[i].freq < OurTree[MinFreq1].freq)
MinFreq1 = i;
}
}
}
if (MinFreq1 == -1)
{
NumOfRootNode = MinFreq0;
break;
}
//Combine two nodes to form a parent node
OurTree[MinFreq0].parent = NodeCounter;
OurTree[MinFreq1].parent = NodeCounter;
OurTree[NodeCounter].freq = OurTree[MinFreq0].freq + OurTree[MinFreq1].freq;
OurTree[NodeCounter].right = MinFreq0;
OurTree[NodeCounter].left = MinFreq1;
OurTree[NodeCounter].parent = -1;
NodeCounter++;
}
}
//Decode Data
void En_Decode::Output1Bit(int bit)
{
if (BitCounter == 8 || bit == -1)
{
while (BitCounter < 8)
{
BitContainer <<= 1;
BitCounter += 1;
}
out_file.put(BitContainer);
BitCounter = 0;
}
61
BitContainer = (BitContainer << 1) | bit;
BitCounter++;
}
void En_Decode::Compress1Byte(int node, int child)
{
if (OurTree[node].parent != -1)
Compress1Byte(OurTree[node].parent, node);
if (child != -1)
{
if (child == OurTree[node].right)
Output1Bit(0);
else if(child == OurTree[node].left)
Output1Bit(1);
}
}
void En_Decode::Encode()
{
char c;
unsigned char uc;
int idx;
FREQCOUNTER OrigBytes = 0;
int ActiveSymbs = 0;
while (!in_file.eof())
{
in_file.get(c);
uc = static_cast<unsigned char>(c);
if (OurTree[uc].freq == 0)
{
ActiveSymbs++;
}
OurTree[uc].freq++;
OrigBytes++;
62
}
out_file.write(reinterpret_cast<const char *>(&OrigBytes), sizeof(FREQCOUNTER));
out_file.write(reinterpret_cast<const char *>(&ActiveSymbs), sizeof(ActiveSymbs));
for (idx = 0; idx < 256; idx++)
{
if (OurTree[idx].freq > 0)
{
uc = static_cast<char>(idx);
out_file.put(uc);
out_file.write(reinterpret_cast<const char *>(&OurTree[idx].freq), sizeof(FREQCOUNTER));
}
}
BuildHufTree();
temp_file.seekg(0, std::ios::beg);
while(1)
{
temp_file.get(c);
if (temp_file.eof())
break;
uc = static_cast<unsigned char>(c);
Compress1Byte(uc, -1);
}
Output1Bit(-1);
}
void En_Decode::Decode()
{
FREQCOUNTER OrigBytes = 0;
int ActiveSymbs = 0;
in_file.read(reinterpret_cast<char *>(&OrigBytes), sizeof(FREQCOUNTER));
in_file.read(reinterpret_cast<char *>(&ActiveSymbs), sizeof(int));
char c;
63
unsigned char uc;
while (ActiveSymbs--)
{
in_file.get(c);
uc = static_cast<unsigned char>(c);
in_file.read(reinterpret_cast<char *>(&OurTree[uc].freq), sizeof(FREQCOUNTER));
}
BuildHufTree();
while (OrigBytes--)
{
int NumOfTgtSymb;
NumOfTgtSymb = NumOfRootNode;
while (OurTree[NumOfTgtSymb].right != -1)
{
if (BitCounter == 0)
{
in_file.get(c);
BitContainer = static_cast<unsigned char>(c);
if (in_file.eof())
return;
BitCounter = 8;
}
if (BitContainer & 0x80)
NumOfTgtSymb = OurTree[NumOfTgtSymb].left;
else
NumOfTgtSymb = OurTree[NumOfTgtSymb].right;
BitContainer <<= 1;
BitCounter--;
}
out_file.write(reinterpret_cast<const char *>(&NumOfTgtSymb), sizeof(char));
}
}
64
4.2. ALGORITMUL LZW (ALGORITM PE BAZ DE DICIONAR)
Algoritmul LZW ncearc totdeauna s genereze coduri pentru iruri deja
cunoscute. i de fiecare dat cnd este generat un cod nou, un sir nou se
adaug n tabelul de iruri [5].
ALGORITM DE CODARE LZW:
1. STRING = get input character
2. WHILE there are still input characters DO
3. CHARACTER = get input character
4. IF STRING+CHARACTER is in the string table then
5. STRING = STRING+character
6. ELSE
7. output the code for STRING
8. add STRING+CHARACTER to the string table
9. STRING = CHARACTER
10. END of IF
11. END of WHILE
12. output the code for STRING
Algoritmul pereche, cel de decomprimare are rolul de a prelua secvena de coduri rezultat la
comprimare i de a utiliza acele coduri pentru reconstituirea irului codificat prin operaia de
comprimare. Un motiv n plus pentru a aprecia eficienta algoritmului LZW rezid n faptul c la
decomprimare nu este necesar cunoaterea/transmiterea prealabil a tabelului de echivalente iruri-
coduri.
Tabelul acesta poate fi (re)construit exact aa cum a fost construit la comprimare, utiliznd
numai intrrile (codurile) primite. Aceast tratare este posibil deoarece algoritmul de comprimare
genereaz componentele ir i caracter din tabel totdeauna nainte de a le utiliza n secvena de
ieire. Aceasta nseamn c datele comprimate nu sunt suprancrcate cu tabele de translaie de mari
dimensiuni.
ALGORITM DE DECODARE LZW:
65
1. Read OLD_CODE
2. output OLD_CODE
3. CHARACTER = OLD_CODE
4. WHILE there are still input characters DO
5. Read NEW_CODE
6. IF NEW_CODE is not in the translation table THEN
7. STRING = get translation of OLD_CODE
8. STRING = STRING+CHARACTER
9. ELSE
10. STRING = get translation of NEW_CODE
11. END of IF
12. output STRING
13. CHARACTER = first character in STRING
14. add OLD_CODE + CHARACTER to the translation table
15. OLD_CODE = NEW_CODE
16. END of WHILE
4.2.1. CODUL SURS AL ALGORITMULUI LZW N VISUAL C++
// Construction/Destruction
void CLZWCompression::Init()
{
m_dictionary = NULL;
m_SavedData = 0;
m_TotalBits = 0;
m_MaxBits = 9;
}
CLZWCompression::~CLZWCompression()
{
ClearDictionary();
}
//This function was added to send log information to the view
void CLZWCompression::Log(CString data)
{
//Put something inside the log if exist
66
if (p_Log != NULL)
p_Log->Add(data);
}
//Create a new dictionary
void CLZWCompression::CreateDictionary()
{
Log("Creating dictionary!");
m_dictionary = new CDictionary;
}
//Remove the existing dictionary
void CLZWCompression::ClearDictionary()
{
if (m_dictionary != NULL)
{
Log("Clear dictionary!");
delete[] m_dictionary;
m_dictionary = NULL;
}
}
BOOL CLZWCompression::Compress(CFile &source, CFile &destination)
{
long prefix = 0;
long result = 0;
BYTE readByte = 0;
unsigned long filetotal = 0;
CString logString;
DWORD resAdd = 256;
//Initialize the necessary data
Init();
//Get the total file size
filetotal = source.GetLength();
67
//Create the dictionary (if not created already)
if (m_dictionary == NULL)
{
CreateDictionary();
}
//Read the first byte from the file
source.Read(&prefix, 1);
//Go over the rest of the file and read it
while (source.GetPosition() < filetotal)
{
//Read the second byte
source.Read(&readByte, 1);
//Check if the prefix and readByte combination exist in the dictionary
result = m_dictionary->GetEntry(prefix, readByte);
//If not exist
if (result == -1)
{
//Add the new combination
resAdd = m_dictionary->AddEntry(prefix, readByte);
//Calculate the new bit size needed to encode the file
CalculateBitSize(resAdd);
//To show a log in the view
logString.Format("Adding combination of %d and %d to dictionary to entry %d.",
prefix, readByte, resAdd);
Log(logString);
//Send the prefix for compression in to the destination file
CompressData(destination, prefix);
68
//Set the prefix as the readByte
prefix = readByte;
//Initiate the result
result = -1;
}
else
{
//Set the prefix as the result
prefix = result;
readByte = 0;
}
}
//Compress the remaining information in the refix into the destination file
CompressData(destination, prefix);
//Close the destination file
CloseCompressedFile(destination);
//Remove the existing dictionary
ClearDictionary();
return TRUE;
}
void CLZWCompression::CompressData(CFile &dest, long toSave)
{
DWORD writeData = 0;
//Move the data you want to write few bits to the left
//and combine it with the already existing data in the buffer
m_SavedData |= (DWORD) toSave << (32 - m_MaxBits - m_TotalBits);
//Add the new added number of bits to the total bits counter
m_TotalBits += m_MaxBits;
69
//Check if it's possible to enter the data to the file
//(over and equal a byte of data)
while (m_TotalBits >= 8)
{
//Get the byte we want to write
writeData = m_SavedData;
writeData >>= 24;
dest.Write(&writeData, 1);
//remove the byte from the buffer
m_SavedData <<= 8;
//Remove the byte from the counter
m_TotalBits -= 8;
}
}
BOOL CLZWCompression::Decompress(CFile &source, CFile &destination)
{
DWORD prefix = 0, data = 0;
CString logString;
CByteArray decodeString;
BYTE writeData = 0, character = 0;
int counter = 0;
Init();
//Create the dictionary (if not already created)
if (m_dictionary == NULL)
{
CreateDictionary();
}
//Get the first prefix information
70
prefix = DecompressData(source);

//Save the prefix as the last used character (since we're writing it in the destination file)
character = (BYTE)prefix;

//Write the prefix in the destination file (the first byte inside a LZW copressed file is always
//the first byte of the original file)
destination.Write(&prefix, 1);
//While the recieve data is not the maximum bit data possible
while ((data = DecompressData(source)) != m_MaxCode[m_MaxBits])
{
//Check if the code exist in the dictionary
//if not
if (!m_dictionary->IsCodeExist(data))
{
//Get the last used character into the decod buffer
decodeString.Add((BYTE)character);
//Decode the existing prefix into a known string of data
m_dictionary->GetBytesFromCode(&decodeString, prefix);
}
else
{
//Decode the data into the decode buffer
m_dictionary->GetBytesFromCode(&decodeString, data);
//Get the last letter inside the data, as the last used letter
character = decodeString.GetAt(decodeString.GetSize() - 1);
}
//Go over the decode buffer, from the end to the start,
//and write the information into the destination file
counter = decodeString.GetSize();
while (counter > 0)
{
writeData = (BYTE)decodeString.GetAt(--counter);
71
destination.Write(&writeData, 1);
//To show a log in the view
logString.Format("Adding character code %d with know visualisation of: %s"
writeData, convertASCIIToText(writeData));
//logString.Format("Adding byte %d to file.", writeData);
Log(logString);
}
//Clear the decode buffer
decodeString.RemoveAll();
//Add the new combination into the dictionary
m_dictionary->AddEntry(prefix, (BYTE)character);
//Calculate the new buffer size to read now
CalculateBitSize(m_dictionary->GetMaxCode()+1);
//Set the new prefix to use
prefix = data;
}
return TRUE;
}
// Decompress Data
DWORD CLZWCompression::DecompressData(CFile &source)
{
DWORD returnValue;
BYTE readByte = 0;
//If the source file still contains information
if (source.GetPosition() < source.GetLength())
{
//check if the number of bits in the read buffer is >= 24
while (m_TotalBits <= 24)
72
{
//Read one byte
source.Read(&readByte, 1);
//Add the byte to the read buffer
m_SavedData |= (DWORD) readByte << (24 - m_TotalBits);
//Add byte to the bit counter
m_TotalBits += 8;
}
}
else
{
//If there is no more data, and there are no more bits to read
//while the file is over, then return the maximum bit number
//to end the decompression process
if (m_SavedData == 0 && m_TotalBits == 0)
return m_MaxCode[m_MaxBits];
}
//calculate the return information
returnValue = m_SavedData >> (32 - m_MaxBits);
//Remove the returned information from the buffer
m_SavedData <<= m_MaxBits;
//Remove the return information bit size from the bit counter
m_TotalBits -= m_MaxBits;
//Return the data
return returnValue;
}
void CLZWCompression::CloseCompressedFile(CFile &source)
{
//Insert to the file the maximum number of bit (for signaling the end of the compression/
//decompression)
CompressData(source, m_MaxCode[m_MaxBits]);
73
//Flash the rest of the file with 0
CompressData(source, 0);
}
void CLZWCompression::CalculateBitSize(DWORD value)
{
//Check the value of the parameter against the Maximum number possible
//and then returns the counter
//This can also be acheived by right shifting the value until we get 0
//and counting the number of times we doing it.
BYTE counter;
for (counter = 0; counter < 32; counter++)
{
if (value <= m_MaxCode[counter])
break;
}
m_MaxBits = counter;
if (m_MaxBits < 9)
m_MaxBits = 9;
}
//Added for using the log from the application
BOOL CLZWCompression::CompressWithLog(CFile &source, CFile &destination, CStringArray
*pLog)
{
p_Log = pLog;
return Compress(source, destination);
}
BOOL CLZWCompression::DecompressWithLog(CFile &source, CFile &destination,
CStringArray *pLog)
{
p_Log = pLog;
return Decompress(source, destination);
74
}
CONCLUZIE
Compresia se realizeaz prin schimbarea modului de reprezentare a datelor avnd deci de a face
cu un caz particular de codare. Aceast codare se face n raport cu un anumit model al datelor, se
cut modelul optimal. Eficiena compresiei obinut cu o metod oarecare poate fi apreciat prin
raportul de compresie raportul dintre dimensiunea reprezentrii datelor n lipsa compresiei i
dimensiunea reprezentrii datelor obinute n urma compresiei.
Cea mai general clasificare a metodelor de compresie se face dup eroarea de refacere a
datelor. n raport cu acest criteriu distingem dou categorii mari de metode: metode fr pierderi
n care datele se refac n totalitate i metode cu pierderi n care datele se refac n limita unor erori
considerate acceptabile.
n funcie de modul cum evolueaz n timp modelul sursei de date, metodele de compresie se
pot diviza n metode statice (n care modelul este fix, nu evolueaz n timp ce este construit apriori,
pe baza unor mesaje considerate tipice), semistatice (n care modelul este construit naintea codrii
pe baza datelor ce urmeaz s fie comprimate i este nemodificat pe durata acesteia) i dinamice (n
care compresia ncepe la o anumit stare a modelului, aceeai att n cazul comprimrii ct i n cel
al decomprimrii).
Modelarea statistic a unei surse discrete de informaie const n asocierea unei probabiliti de
apariie a fiecrui simbol al alfabetului sursei urmat apoi de atribuirea de cuvinte de cod cu un
numr mai mic de bii cuvintelor cu o probabilitate de apariie mai mare. Din aceast categorie fac
parte codificarea Shannon-Fano, codificarea Huffman static i dinamic, codificarea aritmetic.
Metodele de compresie bazate pe modelarea lingvistic a surselor discrete au la baz ideea de a
construi un dicionar din cuvinte ale limbajului asociat sursei. Ulterior inserrii unui cuvnt n
dicionar n cazul oricrei apariii a cuvntului acesta se nlocuiete cu o informaie despre poziia sa
n dicionar. Din aceast categorie fac parte algoritmii LZ77, LZ78, LZW.
n lucrul cu fiiere de dimensiuni mari este important sa se poat asigura compresia datelor
astfel nct acestea s ocupe un spaiu de stocare minim. Pentru prelucrarea datelor respective,
acestea trebuie nsa restaurate n forma decomprimat, recunoscut de aplicatiile care gestioneaz
acele tipuri de informatii.
Aplicaiile au rolul de a facilita munca utilizatorului cu arhive de fiiere (arhivele sunt fiiere
care contin alte fisiere, comprimate prin intermediul unui algoritm de compresie). Procesul de
compresie reduce dimensiunile fisierelor astfel nct s ocupe un spaiu minim sau s poat fi
copiate pe suporturi de capacitate mic i transmise n reea n timp real.
75
WinRAR este versiunea de 32 bii a arhivatorului RAR pentru Windows un instrument
puternic care permite de a crea, gestiona i controla fiierele arhivelor. Numrul fiierelor ce poate
fi adugat la o arhiv depinde de cantitatea memoriei disponibile i de lungimea numelor fiierelor.
Mrimea unei arhive RAR sau a unui fiier de arhivat ntr-o arhiv RAR, este limitat la 8 589 934
591 Go.
WinZip se integreaz perfect n postul de lucru i de explorare Windows. WinZip integreaz o
sarcin de formate de fiiere din cele mai curente de pe Internet: RAR, BZ2, BZ, TBZ, TBZ2, TAR,
gzip, UUencode, XXencode, BinHex et MIME. Mai mult, programele externe asigur acceptarea
fiierelor ARJ, LZH i ARC. WinZip permite accesul practic la toate fiierele compresate i codate
ce pot fi descrcate de pe Internet.
WinZip preia formatul de fiier Zip &4bii, ceea ce elimin toate restriciile practice legate de
mrimea arhivelor, de asemenea i de numrul i mrimea fiierelor compresate ntr-o arhiv.
Capacitatea de arhivare nu este limitat dect de resursele sistemului.
WinZip se caracterizeaz printr-o criptare avansat: tehnologia de criptare AES 128 bii i 256
bii a lui WinZip nu permite consultarea neautorizat a coninutului documentelor.
7-Zip creeaz arhive compatibile n ntregime cu Zip. Oriicine poate decompresa aceste
fiiere cu orice aplicaie compatibil Zip de decompresie. Fiierele compresate cu alte metode de
compresie Zip pot fi extrase de versiunea curent a lui 7-Zip. Dar aceste metode suportate sunt mai
populare, de aceea 7-Zip poate decompresa marea majoritate a arhivelor Zip. 7-Zip suport extensia
Zip64 a formatului ZIP.
PowerArchiver 2009 conine toate opiunile de baz ce sunt ateptate de la o aplicaie de
arhivare permite citirea i extragerea n mai multe formate, de asemenea i crearea arhivelor n
mai multe formate, n particular cu 7-zip care este cel mai puternic la momentul actual. Ceea ce
difereniaz PowerArchiver fa de aplicaiile similare ine de numeroasele sale opiuni.
Apariia necesitii digitizrii publicaiilor de patrimoniu, a manuscriselor etc. impune crearea
unei tehnici de compresie pentru fiierele scanate. Stocarea acestor fiiere n format DjVu care n
acest moment permite cel mai bun raport de compresie/calitate a fiierului standard este o
posibilitate analizat n aceast lucrare. Fiierele .djvu pot fi vizualizate cu ajutorul unui browser
web avnd plugin-ul corespunztor instalat. Un fiier .tif color de 32 Mb ajunge la 100 Kb n format
djvu fr pierdere semnificativ de rezoluie.
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, iar eficiena lui este caracterizat de compromisul criteriilor enumerate.
76
77
BIBLIOGRAFIE
[1] Bottou Lon, Patrick Haffner and Yann LeCun, Efficient Conversion of Digital Documents to
Multilayer Raster Formats, AT&T Labs Research.
[2] Bottou Lon, Patrick Haffner, Paul G. Howard, Patrice Simard, Yoshua Bengio and Yann
LeCun, High Quality Document Image Compression with DjVu, AT&T Labs, Lincroft, NJ, July
13, 1998.
[3] Bottou Lon, Patrick Haffner, Yann LeCun, Paul Howard, Pascal Vincent, Bill Riemers, DjVu:
Un Systme de Compression dImages pour la Distribution Rticulaire de Documents
Numriss, AT&T Labs, Research 100 Schulz Drive, Red Bank, NJ 07701 USA.
[4] Likforman-Sulem Laurence, Apport du traitement des images la numrisation des documents
manuscrits anciens, Ecole Nationale Suprieure des Tlcommunications Dpartement TSI, 46
rue Barrault, 75013 Paris.
[5] Nelson Mark, Data Compression, Dr. Dobb's Journal, October 1st, 1989.
[6] Nelson Mark and Jean-loup Gailly, The Data Compression Book, 2nd edition, M&T Books,
New York, NY,1995.
[7] Ostafe Doina, Biblioteca viitorului - coleciile digitale, Revista Romna de Biblioteconomie i
tiina Informrii, Anul 3, nr. 2, 2007, p.15-18.
[8] Pigeon Steven, Contribution la compression de donnes, Thse presente la Facult des arts
et sciences en vue de lobtention du grade Philosophi Doctor (Ph. D.) en Informatique,
Universit de Motral, Dcembre 2001.
[9] Radescu Radu, Compresia fara pierderi, Editura MATRIX ROM, Bucuresti, 2003.
[10] Repanovici Angela, Gabriela Mailat, Corina Pop, Valorificarea si protejarea documentelor de
patrimoniu prin digitizare, Revista Romna de Biblioteconomie i tiina Informrii, nr. 2,
2007, p.27-29.
[11] Roxin Ioan, Daniel Mercier, Multimdia : Les fondamentaux. Introduction la reprsentation
numrique, Vuibert, Paris, 2004, p.30-65.
[12] Soroiu Claudiu, Compresia datelor, serial Gazeta de informatic nr.13/1, Cluj-Napoca,
ianuarie 2003.
[13] Soroiu Claudiu, Compresia datelor, serial Gazeta de informatic nr.13/2, Cluj-Napoca,
februarie 2003.
78
Referine web:
[14] Trniceriu Daniela prof. dr. ing., Cursul de Compresie i Criptare de la Facultatea de
Electronic i Telecomunicaii, Universitatea Tehnic "Gh. Asachi" Iai,
http://telecom.etc.tuiasi.ro/pns/cc/, consultat 19.03.2010.
[15] 7-zip Help, www. 7-zip .org , consultat 23.04.2010.
[16] Compararea aplicaiilor de arhivare, http://en.wikipedia.org/wiki/Comparison_of_file_
archivers, consultat 23.04.2010.
[17] Compresia datelor, http://www.datacompression.info/, consultat 26.04.2010.
[18] Contens WinRAR, http://download.cnet.com/WinRAR-32-bit/3000-2250_4-10007677. html,
consultat 23.04.2010.
[19] PowerArhiver Help, www. powerarchiver .com , consultat 23.04.2010.
[20] ZIP Help, www. winzip .com , consultat 23.04.2010.
79

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