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