Struktur Data pada Dictionary Karateristik Algoritma LZW

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