Algoritma Lempel Ziv 78 LZ78

Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 Implementasi dari LZ77 file sumber tentu berisi ASCII akan terdiri dari 256 karakter dan panjang bit adalah 8 bit. Kemudian history dan lookahead keduanya mempunyai panjang yang tetap, dengan offsets menggunakan 12 bits dan length menggunakan 4 bits. Dan 1 bit digunakan sebagai penanda atau flag yang membedakan antara token dengan sebuah karakter asli. Sehingga total bit yang dibutuhkan adalah 17 bits sedangkan sebuah karakter asli membutuhkan 9 bits. Oleh sebab itu, maka token hanya digunakan untuk match length minimal 2 karakter. Penggunaan 4 bits pada length merepresentasikan panjang 2 sampai 17. Pada Gambar 2.5 dapat dilihat ilustrasi cara kerja dari implementasi algoritma LZ77. Gambar 2.5 Ilustrasi implementasi dari algoritma LZ77 File sumber membutuhkan 36 x 8 = 288 bits. Sedangkan hasil kompresi algoritma LZ77 adalah 6 token dan 18 karakter asli sehingga jumlah bit hasil kompresi adalah 6 x 17 + 18 x 9 = 264 bits. Sehingga proses kompresi dapat menghemat 24 bit. LZ78 adalah algoritma yang tipikal menggunakan sebuah trie untuk menyimpan seluruh pola string. Sebuah dictionary pada algoritma LZ78 adalah sebuah set entry pola, dimana diindex dari 0 dan bernilai integer. Mirip dengan LZ77 dimana index menunjuk pointing pada sebuah kata pada dictionary yang disebut token. Berbeda dengan algoritma LZ77 output dari proses encoding algoritma LZ78 hanya berupa deretan token saja sehingga tidak dibutuhkan bit tambahan yang digunakan sebagai flag seperti algoritma LZ77.

2.6 Algoritma Lempel Ziv 78 LZ78

Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 Berbeda dengan LZ77 yang menggunakan token yang terdiri dari 3 bagian, LZ78 hanya membutuhkan 2 bagian untuk satu token. Token ini direpresentasikan sebagai f,c dimana f merepresentasikan offset yang berisi posisi awal dari sebuah match string dan c adalah karakter yang merupakan simbol selanjutnya pada file sumber. Sedangkan panjang match telah tersimpan pada dictionary, sehingga tidak dibutuhkan lagi komponen panjang match pada kode output. Jika simbol tidak ditemukan pada dictionary, token 0,x digunakan sebagai penanda bahwa string adalah null string + x. Awalnya sebuah dictionary diisi dengan seluruh 256 karakter ASCII. Berikut algoritma encoding LZ78, yaitu: INPUT: file sumber OUTPUT : Sekumpulan token indexword, c, dictionary yang telah diupdate 1. while not EOF do 2. word ← empty 3. c ← next_char 4. while word + c is in the Dictionary do 5. word ← word + c 6. c ← next_char 7. end while 8. output token indexword, c { Dimana indexword adalah index dari word pada dictionary } 9. add word + c into the dictionary at the nex available location 10. end while Misalkan input string ”a date at a date” akan dikompres menggunakan algoritma LZ78 maka proses encoding dimulai dengan dictionary yang kosong. Proses encoding dapat dilihat pada Gambar 2.6 Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 Gambar 2.6 Ilustrasi proses encoding algoritma LZ78 Proses decoding adalah membaca elemen dari token dari file yang terkompresi kemudian membangun dictionary dengan cara yang sama pada proses encoding. Misalnya x,c adalah sebuah token, dimana x adalah index dari dictionary dan c adalah karakter selanjutnya. Algoritma proses decoding algoritm LZ78 adalah sebagai berikut: INPUT: Sekumpulan token x,c OUTPUT : string dari simbol yang telah didecode 1. while not EOF do 2. x ← next_codeword 3. c ← next_char 4. output dictionary_wordx + c 5. add dictionary_wordx + c into dictionary at the nex available location 6. end while Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009.