Vježba 09 RLE

You might also like

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

Vježba 09 –Kodiranje duljinom niza

(Run-length encoding - RLE)

Međimursko veleučilište u Čakovcu


AISP 2012-2013
Krešimir Kolac, kkolac@mev.hr
Tema
• Potrebno je implementirati funkcije za komprimiranje
(kodiranje) i dekomprimiranje tekstualnih datoteka po principu
RLE algoritma.
• Napraviti testove za različite 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 područje
plave boje iste nijanse. Umjesto da ponavljamo vrijednost za
plavu boju, možemo shvatiti postupak tako da se plava boja
zapiše jednom, a iza nje broj ponavljanja.
• Potrebno je definirati podatak (Escape code) koji će prilikom
dekompresije naznačiti 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
našem slučaju ako je broj ponavljanja veći od 3.

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

• Izlazni tok:
%A9%A5%%13%%242%%334
%F9%%4%x632
Implementacija rješenja –
deklaracija funkcija (rle.h)
Funkcija za kompresiju
Pomoćne 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:
• Pročitati karakter ulazne datoteke
• Ako ulazna datoteka još uvijek nije EOF
• Ako je pročitani karakter različit od ESCAPE karaktera upisati karakter
u izlaznu datoteku
• Inače, pročitati sljedeći karakter, pročitati broj ponavljanja sljedećeg
karaktera i upisati karakter n puta u izlaznu datoteku
(broj ponavljanja karaktera možemo izračunati kao ulazna.get() – 48)
• Zatvoriti ulaznu i izlaznu datoteku
Poboljšanje
• Umjesto maksimalno 9 ponavljanja dopuštamo maksimalno 78
ponavljanja. Ponavljanja zapisujemo ASCII karakterima od
karaktera 49 (1) do 126 (~).
Poboljšanje – primjer komprimirane datoteke
(18.802 znakova)

You might also like