Sunteți pe pagina 1din 10

1

§12. Algoritme de compresie bazate pe dicționar.


Algoritmul LZ77
12.1. Esența şi clasificarea metodelor bazate pe dicționar
Operația de compresie permite reducerea volumului datelor transmise
comparativ cu valoarea inițială a acestuia.

Sistemele de compresie pot fi de două tipuri:


- fără pierderi de informaţie;
- cu pierderi parțiale de informaţie

Compresia fără pierderi de informaţie se realizează prin intermediul:

- metodelor de codare statistică: codarea Shannon-Fano, codarea Huffman,


codarea aritmetică

- metodelor de codare bazate pe dicţionar: algoritmii de compresie LZ


2

Metodele statistice analizate (codarea Fano, Huffman sau aritmetică) utilizează


modelul statistic al datelor

Metodele bazate pe dicţionar nu utilizează modelul statistic.

Se consideră că codorul are în memoria sa o oarecare listă indexată (dicţionar)


din 30 mii cuvinte.

Dacă se numerotează toate cuvintele în dicţionar cu numere de la 0 la 30 000,


atunci pentru indicarea numărului oricărui cuvânt sunt suficienți

n  log 2 30000  15 biţi

Fie un cuvânt ce conţine 7 litere

Dacă transmisiunea acestui cuvânt se realizează prin intermediul codului


standard ASCII–8 din 8 biţi (fără utilizarea compresiei) atunci numărul de biţi
necesari va fi atunci
n ASCII  8  7  56 biţi
3

Dicționarul utilizat poate fi static sau dinamic (adaptiv).

Dicţionarele statice sunt create din timp, iar în procesul codării ele nu se
modifică.
Neajunsul esențial al dicționarelor statice este necesitatea transmisiunii acestui
şi decodorului împreună cu fișierul comprimat.
Dicţionarele dinamice sau adaptive se construiesc în procesul de realizare a
procedurii de compresie prin adăugarea în dicționarul inițial a cuvintelor noi

Avantajele acestora constau în:


- universalitate în utilizare întrucât dicționarul se elaborează în procesul de
codare a fișierului de intrare şi poate fi adaptat la particularitățile acestuia.
- lipsa necesității de transmisiune a dicționarului împreună cu fișierul comprimat

Procedura de formare a dicționarului realizată în codor se reproduce în mod


similar şi în decodor în procesul de decodare a fișierului comprimat.
4

La baza tuturor metodelor moderne de compresie pe baza dicționarului stau


două algoritme care au fost elaborate şi publicate în 1977 şi 1978 de către A.
Lempel şi I. Ziv.

Corespunzător anului publicării aceste algoritme au obținut denumirea de


LZ77 şi LZ78 (uneori LZ1 şi LZ2), respectiv.

Aceste algoritme reprezintă baza unei întregi familii de metode ce reprezintă


unele modificații ale algoritmelor de bază.

Aceste modificații se notează prin simbolurile LZX, LZY ş.a.m.d., unde Х sau
Y ş.a.m.d. reprezintă prima literă a numelui autorului modificaţiei.
5
12.2. Algoritmul de compresie Lempel-Ziv77 (LZ77)
Algoritmul LZ77 şi modificațiile lui se mai numesc algoritme cu dicţionare
glisante sau ferestre glisante
Codorul organizează în memoria sa o anumită regiune numită fereastră
glisantă cu volumul de M baiți, în care pot fi amplasate M simboluri

Fereastra constă din două părți


1. Partea stângă a ferestrei cu dimensiunea de W baiți se numește zona
cache de căutare (dicţionar).

2. Partea dreaptă numită şi zona cache de previzualizare, conține L


simboluri precedente, ce urmează a fi codate.
6

Rezultatul codării seriei selectate se prezintă în forma unui triplet de forma (p,l,s)
unde:
p - numărul poziției de început a seriei ce coincide în dicționar, De obicei, numărul
poziției p se consideră nu față de începutul cache-ului de căutare dar față de
începutul cache-ului de previzualizare
l - lungimea serie ce coincide;
s - prima (după seria ce coincide) literă din cache-ul de previzualizare care iarăși
nu coincide
În cazul exemplului, codul coincidenței serie adc este (2,3,_) , unde p=2
(numărul poziției de început al seriei ce coincide), l=3 – lungimea coincidenței
(numărul simbolurilor seriei ce coincide), s=_ (unde “_ ” se consideră semnul
pauzei dintre cuvintele).

Dacă în rezultatul căutării în dicționar, nu a fost detectată nici o coincidență, atunci


în calitate de cod se scrie (0,0,s) unde s reprezintă litera ce se găsește pe prima
poziție a cache-ului de previzualizare
După formarea codului seriei ce coincide, fereastra se deplasează la dreapta (mai
precis, fișierul de intrare se deplasează la stânga) cu l+1 poziții și începe o nouă
etapă de căutare a seriilor ce coincid şi de formare a codului acestora.
7

Estimarea dimensiunile în biți a unui astfel de cod triplet:

- Pentru prezentarea numărului poziției p sunt necesari log 2 W  biți

- Pentru prezentarea lungimii coincidenței l sunt necesari log 2 L  biți

- Dimensiunile câmpului de reprezentare a simbolului S de obicei este de 8 biți


(cod ASCII de 8 biți)

Eficiența compresiei este cu atât mai înaltă, cu cât este mai mare volumul W al
dicționarului (de obicei, în practică W=2÷16 mii simboluri)

Crește probabilitatea de obținere a unor serii cât mai lungi ce coincid (de obicei,
în practică L≈ câteva zeci)

Decodorul, pe baza seriei de coduri triplet recepționate, elaborează nemijlocit


dicționarul identic dicționarului de la codor

Conform etichetei recepționate (p,l) decodorul determină coincidența în cache-ul


său de căutare, înscrie simbolurile ce coincid şi simbolul din câmpul S în dicționar
şi le transmite și destinatarului.
8

Exemplul 12.1. Să se realizeze procedura de codare şi decodare conform


algoritmului LZ77 a textului mesajului LZ77LZ77., considerând că dimensiunea
dicționarului este W=8 , iar dimensiunea cache-ului de previzualizare L=4 .

Soluție:
а) Procedura de codare

Cache-ul
Cache-ul de
de căutare
căutare Cache-ul
Cache-ul de
de
Nr.
Ieșire
Ieșire codor
codor
Nr. (dicționarul)
(dicționarul) previzual.
previzual.
pas
pas
pas
8
8 7
7 6
6 5
5 4
4 3
3 2
2 1
1 1
1 2
2 3
3 4
4 p
p ll S
S
1
1 -- -- -- -- -- -- -- -- L
L Z
Z 7
7 7
7 0
0 0
0 L
L
2
2 -- -- -- -- -- -- -- L
L Z
Z 7
7 7
7 L
L 00 00 Z
Z
3 - - - - - - L Z 7 7 L Z 0 0 7
4 - - - - - L Z 7 7 L Z 7 1 1 L
5 - - - L Z 7 7 L Z 7 7 . 4 3 .
Tot
Z 7 7 L Z 7 7 . - - - - - -  
al
9

Astfel, textul codat reprezintă o serie din tripletele: (0,0,L), (0,0,Z), (0,0,7), (1,1,L) şi
(4,3,.)

Considerând simbolurile textului inițial codate cu ajutorul codului ASCII-8, atunci


pentru reprezentarea acestui mesaj din 9 simboluri sunt necesari 9  8  72 biţi.
Pentru codarea unui triplet obținut în rezultatul metodei LZ77 sunt necesari
log 2 W   log 2 L   8  log 2 8  log 2 4  8  13 biţi
şi biţi pentru întregul mesaj 13  5  65 biţi

K C  65  0,9
72
10

b) Procedura de decodare

Intrare Cache-ul de căutare Ieșire


Nr. decodor (dicționarul) decodor
pas
p l S 8 7 6 5 4 3 2 1  
1 0 0 L - - - - - - - L L
2 0 0 Z - - - - - - L Z Z
3 0 0 7 - - - - - L Z 7 7
4 1 1 L - - - L Z 7 7 L 7L
5 4 3 . Z 7 7 L Z 7 7 . Z77.
Z77
Tota
                      LZ77LZ77.
l

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