BAB II DASAR TEORI 2.1 Pendahuluan Kompresi data adalah proses pengkodean (encoding) informasi dengan menggunakan bit yang lebih sedikit dibandingkan dengan kode yang sebelumnya dipakai dengan menggunakan skema pengkodean tertentu. Kompresi data, terutama untuk proses komunikasi, dapat bekerja jika kedua pihak antara pengirim dan penerima data komunikasi memiliki skema pengkodean yang sama. Kompresi data hanya mungkin untuk dilakukan apabila data yang direpresentasikan dalam bentuk normal mengandung informasi yang tidak dibutuhkan. Ketika data tersebut sudah ditampilkan dalam format yang seminimal mungkin, maka data tersebut sudah tidak akan bisa dikompresi lagi. File yang demikian disebut dengan random file. 2.1.1 Kompresi Lossless Kompresi data yang menghasilkan file data hasil kompresi yang dapat dikembalikan menjadi file data asli sebelum dikompresi secara utuh tanpa perubahan apapun. Kompresi data lossless bekerja dengan menemukan pola yang berulang di dalam pesan yang akan dikompres tersebut dan melakukan proses pengkodean pola tersebut secara efisien. Kompresi ini juga dapat berarti proses untuk mengurangi redundancy. Kompresi jenis ini ideal untuk kompresi text. Algoritma yang termasuk dalam metode kompresi lossless diantaranya adalah teknik dictionary coding dan huffman coding. 2.1.2 Kompresi Lossy Kompresi data yang menghasilkan file data hasil kompresi yang tidak dapat dikembalikan menjadi file data sebelum dikompresi secara utuh. Ketika data hasil kompresi di-decode kembali, data hasil decoding tersebut tidak dapat dikembalikan menjadi sama dengan data asli tetapi ada bagian data yang hilang. Oleh karena itu kompresi jenis ini tidak baik untuk kompresi data yang kritis 4
seperti data text. Bentuk kompresi seperti ini sangat cocok untuk digunakan pada file-file gambar, suara, dan film. Contoh penggunaan kompresi lossless adalah pada format file JPEG, MP3, dan MPEG. 2.1.3 Dictionary Coding Teknik dictionary coding adalah teknik kompresi yang dilakukan dengan cara mencari string yang sama di dalam dictionary buffer dan look-ahead buffer. Apabila ditemukan string yang sama, maka akan dikeluarkan sebuah token yang isinya mewakili informasi string tersebut. Karena ukuran token tersebut lebih kecil daripada ukuran string yang diwakilinya, maka akan terjadi kompresi. Kompresi pada dictionary coding sangat tergantung pada data yang akan dikompresikan dan dictionary yang digunakan. Apabila pada data yang akan dikompresikan jarang ditemukan string yang sama dengan yang ada di dictionary, maka kinerja dari algoritma kompresinya terhadap data tersebut akan buruk. Sebaliknya, apabila pada data yang akan dikompresikan banyak string yang sama dengan string yang ada pada dictionary, maka kinerja algoritma kompresinya akan baik. Berdasarkan karakteristik dari dictionary yang digunakan, maka teknik dictionary coding dapat dibagi dua, yaitu dictionary coding yang menggunakan static dictionary dan dynamic dictionary. Dictionary static mempunyai cirri-ciri sebagai berikut : sama sepanjang proses encoding tidak efisien untuk semua situasi mempunyai masalah pada parsing kata Dictionary dinamis mempunyai ciri-ciri sebagai berikut : 5
Dibangun dan dimodifikasi secara dinamis selama proses encoding dan decoding Dibangun dari pola khusus yang ditemukan di input Pola dikodekan dengan index atau address pada dictionary Kebanyakan teknik didasarkan pada teori dari Jacob Ziv dan Abraham Lempel Kecepatan ditentukan oleh ukuran dictionary dan teknik pencarian 2.1.4 Algoritma Lempel-Ziv Algoritma Lempel-Ziv adalah keluarga algoritma kompresi yang berbasis dictionary coding yang dikembangkan oleh Jacob Ziv dan Abraham Lempel. Algoritma yang termasuk keluarga algoritma Lempel-Ziv memiliki nama yang didahului dengan LZ. Yang termasuk algoritma Lempel-Ziv diantranya adalah LZ77, LZSS, LZ78, LZW, dll. 2.1.5. Algoritma LZW Algoritma ini adalah versi aplikasi dari algoritma dictionary technique LZ78. Algoritma ini mempunyai ciri-ciri sebagai berikut : 1. Dictionary diinisialisasi dengan semua simbol dari sumber input, sehingga jika simbol pertama kali muncul dalam message sudah punya entry dalam dictionary 2. Algoritma ini mencoba mengeluarkan output 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. Algoritma detail untuk proses kompresinya adalah sebagai berikut : 6
LZWencoding() enter all letters to the dictionary; initialize string s to the first letter from input; while any input left read symbol c; if s + c is in the dictionary s = s + c; else output codeword(s); enter s + c to the dictionary s = c ; output codeword (s); (Adam Drozdek, Elements of Data Compression, Thompson Brook/Cole, 2002) Untuk lebih jelasnya kita akan lihat contoh di bawah ini : encoding string : acbadac encoder dictionary Input output index entry 1 a 2 b 3 c 4 d ac 1 5 ac cb 3 6 cb ba 2 7 ba ad 1 8 ad da 4 9 da ac 5 Keterangan : Pada saat awal algoritma ini akan memasukkan semua huruf yang ada dalam input ke dalam dictionary kemudian diberi indeks. Input pertama yaitu huruf a (dalam algoritma disebut s ) akan mulai dikodekan. Karena huruf a sudah ada dalam dictionary, maka huruf selanjutnya yaitu c ( dalam algoritma disebut c) akan ikut dikodekan. Dalam algoritma disebut bahwa jika s + c ada dalam 7
dictionary maka akan langsung dikodekan, jika tidak maka keluarkan codeword dari s dan masukkan s + c ke dalam dictionary. Dalam contoh ini pertama kita lihat apakah kombinasi huruf ac ada dalam dictionary atau tidak. Karena tidak ada maka ac dimasukkan ke dalam dictionary dan diberi indeks 5. Kemudian algoritma akan mengeluarkan output 1 karena codeword dari a = 1. Begitu seterusnya sampai dengan input yang terakhir. Pada tugas akhir ini, penulis melakukan beberapa modifikasi dari dictionary techniques LZW yang asli supaya didapat hasil kompresi yang lebih baik. Modifikasi yang dilakukan antara lain sebagai berikut : 1. Dictionary dibuat menjadi statis. Dictionary pada LZW asli adalah dinamis, sehingga hasil kompresi menjadi buruk. 2. Pengisian dictionary dibuat berdasarkan objek dan bukan hanya berdasarkan kombinasi karakter saja. Pengertian dari objek akan dibahas pada bab IV. 2.2. Sistem Pengkodean Sistem pengkodean adalah aturan untuk mengubah informasi tertentu (seperti tulisan, kata, atau frase) atau simbol lainnya menjadi bentuk lain. Proses pengubahan tersebut dalam ilmu telekomunikasi disebut dengan encoding. 2.2.1. Fixed Length Encoding Sistem pengkodean simbol yang menggunakan panjang bit yang sama untuk setiap simbol. Panjang bit minimal yang diperlukan oleh sistem pengkodean ini bergantung pada variasi simbol yang akan dikodekan dan sama dengan nilai entropy maksimum simbol. 2.2.2. Variable Length Encoding Sistem pengkodean simbol yang menggunakan panjang bit yang berbedabeda antara simbol yang satu dengan simbol yang lainnya. Salah satu jenisnya adalah panjang simbol ditentukan berdasar probabilitas kemunculan dari simbol 8
tersebut dalam suatu deretan simbol. Jenis encoding inilah yang menjadi basis pada proses kompresi data yang berbasis pada statistika. 2.2.3. Prefix Code Berdasarkan pada pertimbangan untuk mengkodekan simbol dengan manggunakan bit string yang lebih sedikit dibandingkan dengan menggunakan kode standar yang menggunakan panjang bit tetap maka dibuatlah sistem pengkodean simbol dengan menggunakan panjang bit yang variabel. Namun masalah terjadi saat menggunakan kode yang panjangnya variabel yaitu adanya ambiguitas/kerancuan makan saat mengkodekan deretan bit string tertentu menjadi beberapa simbol yang berbeda karena tidak uniquely decodable. Oleh karena itulah digunakan kode yang memiliki properti prefix code yaitu kode dari suatu simbol tidak akan pernah menjadi prefix dari seluruh kode simbol yang selainnya. 9