AISP - Vježba RLE

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Vjeba 09 Kodiranje duljinom niza

(Run-length encoding - RLE)


Meimursko veleuilite u akovcu
AISP 2012-2013
Kreimir Kolac, kkolac@mev.hr
Tema
Potrebno je implementirati funkcije za komprimiranje
(kodiranje) i dekomprimiranje tekstualnih datoteka po principu
RLE algoritma.
Napraviti testove za razliite ulazne datoteke.
Analizirati rezultate.
Run-length encoding (RLE)
Vrlo jednostavna metoda koja koristi injenicu da se u mnogim
datotekama esto nalazi niz uzastopnih istih znakova te ih
nastoji zamijeniti specijalnim znakovima ili kodom.
Tri osnovne varijante. Promatramo podatak na nivou:
Bajta, bita ili piksela.
Koristi se esto za kodiranje binarnih slika. Kodira se uzastopni
broj nula i jedinica. Zamislimo npr. da imamo veliko podruje
plave boje iste nijanse. Umjesto da ponavljamo vrijednost za
plavu boju, moemo shvatiti postupak tako da se plava boja
zapie jednom, a iza nje broj ponavljanja.
Potrebno je definirati podatak (Escape code) koji e prilikom
dekompresije naznaiti da slijedi ponavljana vrijednost.


Osnovni dijagram RLE algoritma
za kodiranje
Primjer kodiranja
Definirajmo ESCAPE karakter %.
Definirajmo maksimalni broj ponavljanja podatka (9) u jednom
kodiranju.
ESCAPE karakter kodiramo bez obzira koliko puta se pojavljuje
u ulaznom toku dok ostale kodiramo samo ako se to isplati, u
naem sluaju ako je broj ponavljanja vei od 3.

Ulazni tok:
AAAAAAAAAAAAAA%3%%42%%%34
FFFFFFFFF%%%%xxxxxx32

Izlazni tok:
%A9%A5%%13%%242%%334
%F9%%4%x632
Implementacija rjeenja
deklaracija funkcija (rle.h)
Funkcija za kompresiju
Pomone funkcije
Glavna funkcija - testiranje
Testni ekran
Primjer kodiranja
Ulaz





Izlaz

Primjer ulazne tekst datoteke (25.144 znakova)
Primjer komprimirane datoteke (20.393 znakova)
Zadatak
Napisati funkciju za dekompresiju po uzoru na funkciju za
kompresiju


Opis algoritma:
Otvoriti ulaznu datoteku, otvoriti izlaznu datoteku
Dok ulazna datoteka nije EOF raditi:
Proitati karakter ulazne datoteke
Ako ulazna datoteka jo uvijek nije EOF
Ako je proitani karakter razliit od ESCAPE karaktera upisati karakter
u izlaznu datoteku
Inae, proitati sljedei karakter, proitati broj ponavljanja sljedeeg
karaktera i upisati karakter n puta u izlaznu datoteku
(broj ponavljanja karaktera moemo izraunati kao ulazna.get() 48)
Zatvoriti ulaznu i izlaznu datoteku
Poboljanje
Umjesto maksimalno 9 ponavljanja doputamo maksimalno 78
ponavljanja. Ponavljanja zapisujemo ASCII karakterima od
karaktera 49 (1) do 126 (~).
Poboljanje primjer komprimirane datoteke
(18.802 znakova)

You might also like