4
Compresia surselor text cu RLE Lucrarea 2 – Compresia surselor text cu RLE (Run Length Encoding) Obiectivul lucrarii este insusirea principiilor de codare RLE, cu aplicatie la compresia fisierelor text. 1. Introducere Metoda RLE are la baza codarea lungimii sirurilor identice (run- length-encoding). Fisierele contin adesea caractere care se repeta de mai multe ori, asa cum sunt fisierele text in care se folosete des caracterul “spatiu” pentru a separa cuvintele sau paragrafele. De asemenea, in cazul semnalelor discretizate se intalnesc portiuni in care semnalul nu-si schimba valoarea, deci va contine aceeasi succesiune de biti. Alt exemplu il constituie imaginile care au un fond alb sau negru destul de larg. Pentru toate aceste exemple, algoritmul run-length encoding ofera o buna compresie. In figura 1 se prezinta un exemplu de compresie pentru o secventa ce are multe zerouri. De fiecare data cand se intalneste un zero in secventa de intrare, se scriu doua valori in fisierul de iesire. Prima dintre acestea este zero si indica ca compresia a inceput. A doua valoare este numarul consecutiv de zerouri care apare. Compresia apare cand se intalnesc secvente de zerouri cu lungime mai mare de 2. (V .0) Figura 1: Un exemplu de compresie folosind algoritmul run-length encoding. 6

L1_Codarea RLE Pentru Text

Embed Size (px)

Citation preview

Page 1: L1_Codarea RLE Pentru Text

Compresia surselor text cu RLE

Lucrarea 2 – Compresia surselor text cu RLE (Run Length Encoding)

Obiectivul lucrarii este insusirea principiilor de codare RLE, cu aplicatie la compresia fisierelor text.

1. Introducere

Metoda RLE are la baza codarea lungimii sirurilor identice (run-length-encoding). Fisierele contin adesea caractere care se repeta de mai multe ori, asa cum sunt fisierele text in care se folosete des caracterul “spatiu” pentru a separa cuvintele sau paragrafele. De asemenea, in cazul semnalelor discretizate se intalnesc portiuni in care semnalul nu-si schimba valoarea, deci va contine aceeasi succesiune de biti. Alt exemplu il constituie imaginile care au un fond alb sau negru destul de larg. Pentru toate aceste exemple, algoritmul run-length encoding ofera o buna compresie.

In figura 1 se prezinta un exemplu de compresie pentru o secventa ce are multe zerouri. De fiecare data cand se intalneste un zero in secventa de intrare, se scriu doua valori in fisierul de iesire. Prima dintre acestea este zero si indica ca compresia a inceput. A doua valoare este numarul consecutiv de zerouri care apare. Compresia apare cand se intalnesc secvente de zerouri cu lungime mai mare de 2.

(V.0)

Figura 1: Un exemplu de compresie folosind algoritmul run-length encoding.

Trebuie observat insa ca secvente de date in care apar zerouri individuale va determina un fisier de iesire mai mare decat cel original. Plecand de la aceasta idee s-au dezvoltat diversi algoritmi care lucreaza pe octeti sau grupuri de octeti. De asemenea, se poate folosi pentru a coda orice alt caracter, nu numai zero-ul asa cum a fost exemplificat anterior.

De exemplu, se da sirul

"aaaabbcdeeeeefghhhij" (1).ce poate fi inlocuit prin

"a4b2c1d1e5f1g1h3i1j1" (V.1)

Atunci cand secventa de intrare are si cifre apar probleme in ceea ce priveste interpretarea si decizia aupra intrebarii daca un caracter este sau nu codat. O solutie consta in inserarea unui caracter special (escape) la fiecare simbol ce trebuie codat. Desigur, caracterul inserat nu trebuie sa faca parte in textul comprimat. O alternativa consta in

"a3b1cde4fgh2ij" (V.2)

6

Page 2: L1_Codarea RLE Pentru Text

Indrumar de laborator

O solutie si mai eficienta se bazeaza pe dublarea caracterului care este codat si scrierea unui numar ce reprezinta numarul de repetitii al caracterului dublat.

  "aa2bb0cdee3fghh1ij" (V.3)

Algoritmul scris in pseudocod pentru ultima varianta lucreaza la nivel de octet.In sfarsit, o alta varianta prsupune existenta unui caracter special care sa indice inceputul

compresiei. Caracterul special nu trebuie sa faca parte din secventa ce trebuie comprimata. Daca acest lucru nu este posibil, o idee interesanta este de a folosi o succesiune de doua caractere care nu apare in secventa originala. Evident, compresia este cu atat mai buna cu cat exista mai multe secvente lungi de caractere identice. De exemplu, secventa "aaaabbcdeeeeefghhhij" poate fi inlocuita cu

„xa4xb2cdxe5fgxh3ij” (V.4)

unde x este caracterul ce arata inceputul unei secvente comprimate. ■

Codarea lungimii este eficienta numai daca numarul de repetitii este mai mare de 4. Valoarea numarului ce reprezinta numarul de repetitii este limitata de reprezentarea binara a caracterelor. De exemplu daca se folosesc 8 biti pentru un caracter atunci numarul cel mai mare de repetitii ca poate fi reprezentat este 255.

In concluzie, codarea lungimii (RLE = Run Length Encoding) este un algoritm de cautare a secventelor (plecand de la simboluri) care se repeta si scierea simbolului si a numarului de repetitii al acestuia.

Este eficient pentru date cu redundanta mare, asa cum este cazul imaginilor. Pentru surse de tip text trebuie lucrat la nivel de bit.

Se foloseste in standardul MNP pentru comunicatii de date avand avantajul usurintei implemenatrii si faptul ca poate lucra in timp real. Algoritmul de compresie este robust la erori. Daca apar erori, singulare sau in rafala, efectul acestora este local, si anume numai pe portiunea in care au aparut erorile.

2. Modul de lucru

2.1. Sa se comprime (manual) mesajul din fisierul „input.txt” =

„aaaaaaaaannnnnnnaaaaaaaa______aaarrrrrrrreeeeeeee______mmmmmeeeeerrrrrreeeeeee.”

cu metoda V.1

Rezultatul este:

a 9 n 7 a 8 _ 6 a 3 r 8 e 8 _ 6 m 5 e 5 r 6 e 7 . 1

7

Page 3: L1_Codarea RLE Pentru Text

Compresia surselor text cu RLE

2.2. Se ruleaza programul „RLE_v1.m” pentru compresia fisierului „input.txt”. Codul sursa complet al programului este prezentat in anexa 2. Rezultatele compresiei sunt prezentate in figura de mai jos, obtinuta cu un editor de fisire hexa. Fiecarea casuta reprezinta un octet.

Dimensiunea (in octeti) a fisierului de intrare este 79 octeti, cate un octet pentru fiecare caracter. Dimensiunea fisierului de iesire este 26 octeti, din care 13 octeti pentru caractere si 13 octeti pentru numarul de repetitii. Raportul de compresie este aproximativ 3.

2.3. Sa se verifice si sa se explice corectitudinea rezultatelor.

2.4. Sa se scrie un program pentru decompresia fisierului ontinut anterior.

2.5. Sa se vberifice compresia si decompresia pe un numar de 3 fisiere de diverse marimi: 10KB, 100kB si 200 KB

3. Tema de casa

Sa se scrie un program pentru codarea si decodarea run-length in varianta V3. Sa se calculeze rapoartele de compresie si sa se compare pe un set de trei fisiere text de cel putin 100KB, cu diferite continuturi: stiri, tehnic si literatura. Interpretati rezultatele.

8