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
Pemilihan struktur data sangat penting pada algoritma LZW, terutama pemilihan struktur data pada dictionary. Struktur data binary tree sangat tepat digunakan pada
dictionary, karena binary tree akan menghemat waktu pencarian. Karena waktu pencarian dapat dikurangi maka akan berdampak pada kecepatan waktu kompresi dan
dekompresi yang semakin baik. Hal ini akan menambah tingkat efisiensi dari algoritma tersebut.
2.8.1 Struktur Data Binary Tree
Binary Tree adalah tree yang terurut yang pada setiap node dapat mempunyai satu, dua, atau tidak ada children node. Binary Tree yang digunakan untuk dictionary akan
Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009.
USU Repository © 2009
berurut berdasarkan abjad dari string dictionary. Sehingga pencarian dapat dilakukan dengan lebih cepat, hal ini adalah salah satu keuntungan pemakaian binary tree jika
dibandingkan struktur data list biasa Weiss, 2003.
F
E G
C EF
D
Gambar 2.8 Ilustrasi binary tree
Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009.
USU Repository © 2009
BAB 3
PERANCANGAN DAN IMPLEMENTASI PERANGKAT LUNAK
3.1 Karateristik Algoritma LZW
Cara kerja algoritma LZW adalah menyimpan karakter yang berulang pada sebuah dictionary. Kemudian output berupa kode dari string yang terdapat pada input
tersebut. Sehingga efisiensi algoritma ini sangat bergantung pada dictionary, dimana implementasi dictionary akan mempengaruhi kecepatan serta hasil dari kompresi.
Sebuah dictionary dapat menyimpan jumlah item bergantung pada pemilihan panjang kode bit, semakin panjang kode bit yang digunakan maka semakin banyak item yang
dapat disimpan pada program.
3.1.1 Proses Kompresi LZW
Proses kompresi LZW adalah membaca karakter dari file sumber kemudian karakter tersebut digabung dengan karakter yang telah dibaca sebelumnya menjadi sebuah
string. String tersebut kemudian dicari pada dictionary jika tidak terdapat maka tambahkan string tersebut pada dictionary kemudian output string tersebut. Berikut
contoh proses kerja algoritma LZW.
Contoh proses kompresi yaitu misalnya string “WEDWEWEEWEBWET” akan dikompresi dengan LZW. Dictionary akan
diisi dengan nilai awal dan kode untuk karakter ascii. Kompresi akan menghasilkan output code dan dictionary dapat dilihat pada Tabel 3.1:
Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009.
USU Repository © 2009
Tabel 3.1 Contoh proses kompresi
Output Code Dictionary
94 ‘’ W = 256
87 ’W’ WE = 257
69 ‘E’ ED = 258
68 ‘D’ D = 259
256 WE = 260
69 ‘E’ E = 261
260 WEE = 262
261 EW = 263
257 WEB = 264
66 ‘B’ B = 265
260 WET = 266
84 ‘T’
Proses pembuatan dictionary menggunakan struktur data binary tree. Hal ini dimaksudkan agar kecepatan pencarian pada dictionary dapat ditingkatkan. Dari
dictionary yang dilihat pada tabel maka contoh binary tree yang dihasilkan pada proses kompresi dapat dilihat pada Gambar 3.1:
Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009.
USU Repository © 2009
“W” 256
“WE” 259
“E” 260
“WEE” 261
“EW” 262
“WEB” 263
“B” 264
“WET” 265
“ED” 257
“D” 258
“WE” 257
Gambar 3.1 Ilustrasi binary tree pada proses kompresi
Proses pencarian pada binary tree rata-rata membutuhkan O log n waktu dan worst case dari proses pencarian adalah On untuk n adalah banyak data pada
dictionary. Dengan waktu rata-rata yang cukup baik maka kecepatan kompresi dan dekompresi akan semakin cepat. Hal ini adalah keuntungan pemakaian stuktur data
binary tree.
Misalkan kita memilih kompresi menggunakan jumlah bit kode 9 bit maka jumlah data dictionary adalah 2
9
= 512 data yang dapat disimpan pada dictionary. Semakin besar jumlah bit kode yang digunakan maka jumlah item dictionary akan
semakin banyak. Dampak dari jumlah item dictionary adalah rasio kompresi yang dihasilkan. Dan hasil kompresi adalah sebagai berikut : 94876968
25669 2602612576626084. Dan masing-masing kode yang dihasilkan adalah sebuah data dengan panjang kode 9 bit. Sehingga jumlah kode bit
akan menentukan jumlah item data pada dictionary, hal ini sangat mempengaruhi efisiensi kompresi yang dilakukan baik pada kecepatan maupun rasio.
Fahrur Razi : Analisis Pengaruh Panjang Bit Kode Pada Kinerja Program Kompresi Yang Menggunakan Algoritma Lempel Ziv Welch LZW, 2009.
USU Repository © 2009
3.1.2 Proses Dekompresi LZW
Proses dekompresi yaitu membaca satu-persatu kode bit dan menerjemahkan pada dictionary kemudian output hasilnya. Karateristik algoritma LZW adalah membangun
kembali dictionary berdasarkan kode bit yang diterima. Proses pembuatan dictionary ini tetap menggunakan struktur data binary tree. Sesuai proses kompresi yang telah
dilakukan maka kode-kode bit tersebut adalah : 94876968 25669 2602612576626084. Kemudian hasil dekompresi algoritma LZW
dapat dilihat pada Tabel 3.2:
Tabel 3.2 Contoh proses dekompresi
Output Code Dictionary
94 ‘’ W = 256
87 ’W’ WE = 257
69 ‘E’ ED = 258
68 ‘D’ D = 259
256 WE = 260
69 ‘E’ E = 261
260 WEE = 262
261 EW = 263
257 WEB = 264
66 ‘B’ B = 265
260 WET = 266
84 ‘T’
3.2 Pemodelan Fungsional