Algoritma Lempel Ziv Welch LZW

Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 Misalnya input dari proses encoding adalah token-token : 0a 0spasi 0d 1t 0e 2a 0t 6spasi 3a 7e. Proses decoding dapat dilihat pada Gambar 2.7. Dari proses ini didapat hasil berupa string asli yaitu “a date at a date” kembali. Gambar 2.7 Ilustrasi proses decoding algoritma LZ78 Menurut Menyi 2003, hal:139 beberapa hal yang perlu diperhatikan pada algoritma LZ78 adalah sebagai berikut: 1. LZ78 telah membuat perbaikan-perbaikan daripada LZ77. Dimana komponen token yang digunakan lebih sedikit dibanding LZ77. 2. Tidak diperlukannya tambahan bit sebagai flag seperti LZ77 sehingga lebih efisien. 3. LZ78 mempunyai banyak varian dan LZW adalah salah satu varian LZ78 yang sangat populer.

2.7 Algoritma Lempel Ziv Welch LZW

Algoritma Lempel-Ziv-Welch LZW menggunakan teknik adaptif dan berbasiskan “kamus” Pendahulu LZW adalah LZ77 dan LZ78 yang dikembangkan oleh Jacob Ziv Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 dan Abraham Lempel pada tahun 1977 dan 1978. Terry Welch mengembangkan teknik tersebut pada tahun 1984. LZW banyak dipergunakan pada UNIX, GIF, V.42 untuk modem. Algoritma ini bersifat adaptif dan efektif karena banyak karakter dapat dikodekan dengan mengacu pada string yang telah muncul sebelumnya dalam teks. Prinsip kompresi tercapai jika referensi dalam bentuk pointer dapat disimpan dalam jumlah bit yang lebih sedikit dibandingkan string aslinya. Menurut David Salomon 2005, hal:123 algoritma ini adalah versi aplikasi dari algoritma dictionary LZ78. Algoritma ini mempunyai ciri-ciri sebagai berikut : Dictionary diinisialisasi dengan semua symbol dari sumber input, sehingga jika symbol pertama kali muncul sudah punya entry dalam dictionary. Algoritma ini mengeluarkan output berupa indeks untuk string yang ada dalam dictionary. Jika kombinasi string tersebut tidak ada, maka kombinasi tersebut akan ditambahkan dalam dictionary dan algoritma akan mengeluarkan output dari kombinasi yang ada. Menurut Mengyi 2006, hal:120 algoritma untuk proses kompresi dengan algoritma Lempel Ziv Welch adalah sebagai berikut : Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 1. CHAR = get input character 2. WHILE there are still input characters DO 3. NEXT = get input character 4. IF CHAR+NEXT is in the string table then 5. CHAR = CHAR+NEXT 6. ELSE 7. output code for CHAR 8. add CHAR+NEXT to the string table 9. CHAR = NEXT 10. END of IF 11. END of WHILE 12. output the code for STRING Contoh proses kompresi yaitu misal string “AAABAABBBB” akan dikompresi dengan LZW. Dictionary akan diisi dengan nilai awal dan kode untuk karakter ascii dan pada proses kita menggunakan panjang bit kode adalah 9 bit. Tahapan proses kompresi ditunjukkan pada Tabel 2.1. Tabel 2.1 Proses kompresi CHAR NEXT CHAR + NEXT output code dictionary A A AA 65 ‘A’ AA = 256 A A AA AA B AAB 256 AAB = 257 B A BA 66 ‘B’ BA = 258 A A AA AA B AAB AAB B AABB 257 AABB = 259 B B BB 66 ‘B’ BB = 260 B B BB BB 260 Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 Sehingga output yang dihasilkan dari proses kompresi adalah sebagai berikut : 652566625766260. Hasil kompresi menghasilkan 6 codeword dengan panjang 9 bit, maka jumlah bit yang digunakan adalah 54 bit. Sedangkan file sumber mempunyai 10 karakter ASCII dengan masing-masing karakter 8 bit sehingga berjumlah 80 bit. Sehingga dapat dihitung rasio kompresi adalah : Rasio = 100 _ _ _ _ ×     asli file Ukuran i terkompres file Ukuran = 100 80 54 ×       = 67,5 Menurut Mengyi 2006, hal:125 algoritma untuk proses dekompresi dengan algoritma Lempel Ziv Welch adalah sebagai berikut : 1. read x from the compressed file 2. look up dictionary for element at x 3. output element 4. word = element 5. while not E0F do 6. read x 7. look up dictionary for element at x 8. if there is no entry yet for index x then 9. element = word + firstCharOfWord 10. end if 11. output element 12. add word + firstCharOfElement to the dictionary 13. word = element 14. end while Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009. USU Repository © 2009 Contoh Proses dekompresi misalnya output yang didapat dari hasil kompresi yang telah dilakukan yaitu 652566625766260 kemudian akan didekompresi menggunakan algoritma dekompresi Lempel Ziv Welch LZW, proses dekompresi sebagai berikut : Tabel 2.2 Proses dekompresi x element output word in loop dictionary 65 A A 256 AA AA AA AA = 256 66 B B B AAB = 257 257 AAB AAB AAB BA = 258 66 B B B AABB = 259 260 BB BB BB BB = 260 Setelah proses dekompresi dilakukan maka file tersebut kembali pada data semula yaitu : “AAABAABBBB”. Algoritma LZW telah banyak diaplikasikan diantaranya program utilitas Unix yang bernama compress.

2.8 Struktur Data pada Dictionary