Algoritma Lempel Ziv 77 LZ77

Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 didesain sebagai penerus dari GIF. Algoritma LZ78 telah digunakan pada standar komunikasi modem V.42bis, dan program kompres Unix bernama compress, dan pada GIF format file citra Hankerson et al, 2003. Algoritma Lempel Ziv ini terbagi atas dua varian utama yaitu LZ77 dan LZ78. Perbedaan utama kedua algoritma ini adalah pada teknik pembuatan dictionary. Pada LZ77 dictionary adalah fragmen dari sebuah window sliding window. LZ78 menggunakan frase-frase yang pada file sebagai dictionary. Algoritma LZW adalah varian dari algoritma LZ78. Keunggulan masing-masing adalah algoritma LZ78 menggunakan struktur data yang lebih kompleks dalam mengelola penyimpanan dictionary, LZ77 mengubah dengan cepat dictionary dan lebih cepat pada saat decoding. Pada aplikasi pemilihan skema dapat sangat kompleks karena telah dipatenkan Hankerson et al, 2003.

2.5 Algoritma Lempel Ziv 77 LZ77

Pada dasarnya algoritma LZ77 membagi window dengan dua bagian yaitu history dan lookahead. Dalam pertimbangan pembuatan dictionary maka history akan digunakan sebagai dictionary sehingga history harus memiliki panjang lebih dari lookahead. Idenya adalah menggantikan segmen dari lookahead dengan pointer pada dictionary, dan menggeser prosesnya sepanjang window Hankerson et al, 2003. Gambar 2.1 Ilustrasi contoh cara kerja algoritma LZ77 Pada Gambar 2.1 misalkan segmen inisial ‘he’ sama dengan karakter kedua dari frase dictionary ‘shell’ dan pada contoh ini digunakan offset 10 pada dictionary Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 dan dihitung dari kanan ke kiri. Dimana komponen ketiga adalah karakter selanjutnya dari file sumber dan kemudian window digeser lihat Gambar 2.2. Gambar 2.2 Ilustrasi penggeseran window pada algoritma LZ77 Kemudian ‘he’ diganti menjadi sebuah token yaitu 10,2,spasi. Dimana 10 berarti jarak karakter dengan karakter lookahead, 2 berarti panjang string yang sama, dan spasi adalah karakter setelah karakter ‘he’ tersebut. Kompresi akan sukses jika token ini menghasilkan jumlah bit yang lebih sedikit dari pada file sumber. Selanjutnya karakter yang tidak sama pada token dapat mengakibatkan suatu kasus dimana tidak ada karakter yang sama pada history. Maka penggunaan offset,length dapat digunakan ketimbang token triple sebelumnya. Gambar 2.3 menunjukkan beberapa langkah proses pada contoh masalah: Gambar 2.3 Ilustrasi penggunaan token offset,length Sebuah decoder menerima output token, dimana token tersebut akan dibangun ulang. Menurut Hankerson 2003, hal:231 ada beberapa hal yang harus diperhatikan pada algoritma ini, yaitu: Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 1. Decoder harus dapat membedakan antara sebuah token dengan sebuah karakter asli. 2. Kualitas kompresi akan bergantung pada token, tepatnya pada panjang string token. Dimana panjang yang terlalu pendek dapat menyebabkan rasio kompresi membesar. 3. String yang sama didasarkan pada lookahead. Seperti pada Gambar 2.4 dimana window berisi fragmen tersebut. Gambar 2.4 Ilustrasi contoh fragmen lookahead yang terdapat pada history 4. Setiap langkah, maka digunakan greedy parsing dimana dictionary dicari untuk sebuah string sama yang terpanjang pada inisial segmen. Tidak ada jaminan penggunaan greedy parsing adalah maksimal. Pencarian untuk longest match pada dictionary adalah hal yang cukup sulit. Dimana banyak varian LZ77 yang menggunakan struktur data yang baik untuk mempercepat pencarian. 5. Banyak varian LZ77 yang mempunyai kecepatan tinggi saat proses decoding, akan tetapi diperlukan kerja keras untuk mencari algoritma dan struktur data yang cepat pada proses encoding. 6. Sebuah token dapat dikompres lagi dengan metode kompresi tertentu. Sebuah contoh, seharusnya digunakan jumlah bit yang tetap untuk menyimpan match length kemudian match length tersebut dikompres lagi dengan menggunakan metode kompresi probabilistik seperti Huffman akan menambah efektivitas dari algoritma LZ77. 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