BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search...
Embed Size (px)
Transcript of BAB II TEKNIK KOMPRESI DATA - · PDF filesingkat tentang circular queue. ... Binary-search...
5
BAB II
TEKNIK KOMPRESI DATA
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 berntuk 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 teks.
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
6
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
seperti data teks. 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.2 Teknik 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. Algoritma
yang termasuk pada dictionary coding sebagian besar berasal dari keluarga algoritma
Lempel-Ziv, seperti algoritma Lempel-Ziv Storer Szymanski (LZSS), algoritma
Lempel-Ziv 78, dan algoritma Lempel-Ziv Welch. Ketiga algoritma tersebut akan
dibahas pada subbab selanjutnya.
2.2.1 Algoritma Lempel-Ziv 77
Algoritma Lempel-Ziv 77 (LZ77) merupakan algoritma pertama dalam
keluarga algoritma Lempel-Ziv. Ide utama dari algoritma ini adalah menggunakan
sebagian dari input yang telah lewat sebagai dictionary, sehingga algoritma ini
dapat dikatakan bekerja berdasarkan prinsip sliding window. Window bagian kiri
7
disebut dengan search buffer atau dictionary buffer, sedangkan window bagian
kanan disebut dengan look-ahead buffer. Dictionary buffer menyimpan simbol-
simbol yang baru saja dikodekan, sedangkan look-ahead buffer menyimpan
simbol yang akan dikodekan. Pada tiap iterasi, algoritma akan mencari pada
dictionary buffer substring (sepanjang mungkin) yang matching dengan prefix
pada look-ahead buffer. Jika terjadi match, maka akan ditransmisikan triplet
. P menujukkan posisi match pada dictionary buffer yang dihitung dari sisi
kanan dictionary buffer. L menujukkan panjang match yang diperoleh, sedangkan
s menunjukkan simbol pertama yang tidak match pada look-ahead buffer. Setelah
token ditransmisikan, maka buffer akan digeser sebanyak jumlah match yang
terjadi. Contoh operasi algoritma LZSS dapat dilihat pada gambar 2.1.
Data: sir sid eastman easily teases sea sick seals
Gambar 2.1. Contoh proses encoding algoritma LZ77 [1].
Gambar 2.1 dapat dijelaskan sebagai berikut:
Pertama, input mengisi look-ahead buffer sampai penuh. Karena
karakter pertama dari look-ahead buffer tidak memiliki match,
maka akan dikeluarkan token . Selanjutnya, karena
karakter yang dikodekan berjumlah satu buah, maka buffer akan
digeser sepanjang satu karakter ke kiri.
Selanjutnya, dapat kita lihat bahwa karakter i juga tidak
memiliki macth, sehingga akan dikeluarkan token .
Karena input yang dikodekan berjumlah satu buah, buffer kembali
digeser sebanyak satu karakter ke kiri.
8
Keadaan ketiga dan keadaan keempat masih sama seperti pada
keadaan pertama dan kedua. Dengan demikian, akan dikeluarkan
token dan token untuk kedua keadaan tersebut.
Pada keadaan kelima barulah terjadi macth yaitu antara string si
pada dictionary buffer dengan pada look-ahead buffer, sehingga
token yang dikeluarkan adalah . Pada keadaan ini, setelah
mengeluarkan token, maka input akan digeser sebanyak jumlah
karakter yang macth, yaitu sebesar dua karakter.
Selanjutnya, terjadi macth antara sesama karakter spasi pada
dictionary buffer dengan pada look-ahead buffer. Karena terjadi
macth, maka akan dikeluarkan token . Setelah itu, input
akan digeser sebanyak jumlah karakter macth, yaitu satu buah.
Algoritma LZ77 memiliki suatu kekurangan yaitu selalu mengkodekan
dengan menggunakan token yang berisi triplet. Kekurangan inilah yang menjadi
salah satu hal yang diperbaiki oleh algoritma LZSS sehingga algoritma LZSS
dapat menghasilkan rasio kompresi yang lebih baik daripada algoritma LZ77.
2.2.2 Algoritma Lempel Ziv Storer Szymanski
Seperti yang telah dijelaskan sebelumnya, algoritma Lempel-Ziv Storer
Szymanski ini merupakan perbaikan dari algoritma LZ77. Algoritma ini
dikembangkan oleh Storer dan Szymaski pada tahun1982 [3]. Pseudocode dari
algoritma LZSS dapat dilihat pada gambar 2.1. Secara umum konsep dasarnya
masih sama dengan algoritma LZ77, yaitu menggunakan dua buffer yang diisi
oleh input berdasarkan metode sliding window. Perbedaan antara LZSS dengan
LZ77 terletak pada tiga hal berikut:
Menggunakan circular queue untuk menyimpan look-ahead buffer.
Menyimpan dictionary buffer di dalam suatu pohon biner.
Menggunakan dua jenis token, yaitu yang memiliki dua field dan
yang memiliki tiga field.
9
Gambar 2.2. Pseudocode algoritma LZSS [8].
2.2.2.1 Perbedaan LZSS Dengan Algoritma LZ77
2.2.1.1.1 Penggunaan Circular queue
Circular queue adalah sebuah struktur basis data. Secara
fisik, circular queue adalah suatu array tetapi memiliki cara
penggunaan yang khusus. Gambar 2.2 memberikan ilustrasi
singkat tentang circular queue. Gambar tersebut menunjukkan
sebuah array 16-byte yang dibangun dengan cara menambahkan
karakter pada akhir array, dan menghapus karakter yang berada
pada awal array. Posisi awal dan akhir pada circular queue selalu
bergeser dari kanan ke kiri dan selalu ditunjukkan dengan s dan e.
Pada (a), terdapat 8 karakter sid_east, sisanya kosong. Pada (b),
semua slot pada buffer terisi dan e menunjukkan akhir dari buffer.
Pada (c), huruf pertama (huruf s) telah dihapus dan posisinya
ditempati oleh huruf sebelahnya (huruf i). Penggunaan circular
queue ini sebenarnya bertujuan untuk mempercepat proses
encoding, karena dengan digunakannya circular queue maka isi
dari look-ahead buffer tidak perlu untuk di geser satu persatu.
10
Gambar 2.3. Circular queueI [1] .
2.2.2.1.2 Penggunaan Binary-Search Tree
Binary-search tree adalah sebuah pohon biner yang cabang
sebelah kiri dari node A memiliki nilai yang lebih kecil dari node
A, sedangkan cabang sebelah kanan memiliki nilai yang lebih
besar daripada node A. Untuk membandingkan antara satu string
dengan yang lainnya digunakan prinsip lexicographic order, yaitu
berdasarkan kemunculan string tersebut pada alfabet. Sebagai
contoh, string dana memiliki nilai lebih kecil daripada dara,
karena huruf ketiga (n) dari kata dana muncul lebih dulu
daripada huruf ketiga dari kata dari (r). Karakter spasi memiliki
nilai yang lebih kecil daripada alfabet, sedangkan angka diletakkan
setelah alfabet. Contoh sebuah binary-search tree dapat dilihat
pada gambar 2.3.
Gambar 2.4. Gambar adalah sebuah binary-search tree [1].
2.2.2.1.3 Perbedaan Dalam Penggunaan Token
Algoritma LZSS menggunakan dua jenis token, yaitu:
11
Token yang terdiri dari pasangan byte .
Token yang terdiri dari triplet .
Variabel S adalah simbol pertama pada look-ahead buffer
yang tidak match. Variabel P adalah posisi match yang ditemukan
pada dictionary buffer, sedangkan variabel L adalah panjang match
yang ditemuka