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.
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)