Pesatnya perkembangan teknologi komunikasi pada era globalisasi saat ini telah
mendorong berkembangnya teknologi serta kebutuhan akan telekomunikasi di bidang-
bidang lainnya. Salah satu kebutuhan tersebut adalah dalam penyimpanan data. Oleh karena
itu, telah dikembangkan algoritma untuk memampatkan data (kompresi data). Kompresi
adalah proses mengkonversikan sebuah input data stream (stream sumber, atau data mentah
asli) menjadi data stream lainnya (bit stream hasil, atau stream yang telah terkompresi) yang
berukuran lebih kecil. Kompresi terdapat 2 jenis lossless atau lossy. Dalam kompresi lossless,
teks asli dapat disusun kembali dari data terkompresi. Kompresi lossless dibagi menjadi 2
kelompok berdasarkan algoritmanya, yaitu algoritma berbasis entropi dan berbasis dictionary.
Huffman adalah salah satu kompresi lossless menggunakan algoritma berbasis entropi dan
Lempel Ziv Welch (LZW) adalah salah satu kompresi lossless menggunakan algoritma
berbasis dictionary.
1
BAB I
PENDAHULUAN
1. Latar Belakang
Dewasa ini perkembangan teknologi berupa pengunaan komputer dan piranti mobile
sangatlah pesat. [1]Meningkatnya penggunaan komputer dan piranti mobile dalam
kegiatan sehari-hari, secara tidak langsung juga membuat kebutuhan akan penyimpanan
data semakin meningkat. Data tersebut, dapat berupa file text, gambar, suara, dan video.
Semakin besar ukuran file, semakin besar pula tempat penyimpanan yang dibutuhkan. Untuk
keperluan pengiriman data melalui media transmisi, akan semakin lama juga waktu
yang dibutuhkan untuk mengirimkan data tersebut. Oleh karena itu, mulailah
dikembangkan algoritma-algoritma kompresi yang bertujuan untuk memampatkan data.
Kompresi data dikenal sebagai ilmu atau seni merepresentasikan informasi dalam
bentuk yang lebih compact. Berbagai algoritma telah dikembangkan untuk keperluan
kompresi data. Namun, algoritma tersebut sebagian besar lebih efisien digunakan untuk
tipe data tertentu saja. Misalnya untuk kompresi text, terdapat algoritma Huffman, Ziv
and Lempel 77 (LZ77), Ziv and Lempel 78 (LZ78), Lempel Ziv Welch (LZW), Dinamic
Markov Compression (DMC), Run Length Encoding (RLE), Shannon Fano dan lain-lain.
Dalam tugas besar ini akan dibahas teknik kompresi data menggunakan algoritma
Huffman, Algoritma Lempel Ziv Welch (LZW), dan Dinamic Markov Compression (DMC)
sebagai contoh dari teknik kompresi terkini dan terpopuler.
2
BAB II
PEMBAHASAN
3
2.4 Metode Kompresi [5]
Berdasarkan teknik pengkodean / pengubahan simbol yang digunakan, metode kompresi
dapat dibagi kedalam tiga kategori, yaitu:
a. Metode Symbolwise : menghitung peluang kemunculan dari tiap simbol dalam file
input, lalu mengkodekan satu simbol dalam satu waktu, dimana simbol yang lebih
sering muncul diberi kode lebih pendek dibandingkan simbol yang lebih jarang
muncul. Contoh algoritma Huffman.
b. Metode Dictionary : Menggantikan karakter/fragmen dalam file input dengan indeks
lokasi dari karakter/fragmen tersebut dalam sebuah kamus (dictionary), contoh
algoritma LZW.
c. Metode Predictive : Menggunakan model finite-context atau finite state untuk
memprediksi distribusi probabilitas dari simbol-simbol selanjutnya, contoh :
algoritma DMC (Utami, 2013).
4
Gambar 1.1 Ilustrasi Kompresi Lossy
5
keefisienan kompresi bergantung kepada berapa banyak karakter yang
digunakan dan seberapa besar distribusi probabilitas pada data asli. Contoh
algoritma yang berbasis entropi adalah: Huffman Coding, Adaptive
Huffman, dan Shannon Fano, Run Length,Burrows wheeler transform.
Algoritma Huffman Coding adalah salah satu algoritma yang dapat digunakan untuk
melakukan kompresi data sehingga ukuran data yang dihasilkan menjadi lebih rendah dari
ukuran sebenarnya. Contoh yang dibahas kali ini adalah mengenai kompresi dan
pengembalian data dari sebuah kalimat.
Huffman Coding adalah sebuah kode prefiks yang sudah teroptimasi yang biasanya
digunakan pada kompresi data lossless. Algoritma ini menggunakan metode khusus untuk
memilih perwakilan dari masing-masing simbol, yang akhirnya menghasilkan sebuah kode
prefiks. Algoritma ini merupakan metode yang sangat terkenal untuk membuat kode prefiks
sehingga Huffman Code digunakan secara luas sebagai sinonim dari kode prefiks bahkan
untuk sesuatu skrip yang tidak dihasilkan dari perhitungan Huffman Coding
Gambar 2.1
Untuk mengurangi jumlah bit yang dibutuhkan, panjang kode untuk tiap karakter dapat
dipersingkat, terutama untuk karakter yang frekuensi kemunculannya besar. Pada string di
atas, frekuensi kemunculan A = 3, B = 1, C = 2, dan D = 1, sehingga dengan menggunakan
algoritma di atas diperoleh kode Huffman seperti pada Tabel 1.
8
Dengan menggunakan kode Huffman ini, string ABACCDA direpresentasikan
menjadi rangkaian bit : 0 110 0 10 10 111 0. Jadi, jumlah bit yang dibutuhkan hanya 13 bit
dari yang seharusnya dibutuhkan 56 bit. Untuk menguraikan kembali data yang sudah
dikodekan sebelumnya dengan algoritma Huffman, dapat digunakan cara sebagai berikut :
1. Baca bit pertama dari string biner masukan
2. Lakukan traversal pada pohon Huffman mulai dari akar sesuai dengan bit yang
dibaca. Jika bit yang dibaca adalah 0 maka baca anak kiri, tetapi jika bit yang
dibaca adalah 1 maka baca anak kanan.
3. Jika anak dari pohon bukan daun (simpul tanpa anak) maka baca bit berikutnya
dari string biner masukan.
4. Hal ini diulang (traversal) hingga ditemukan daun.
5. Pada daun tersebut simbol ditemukan dan proses penguraian kode selesai.
6. Proses penguraian kode ini dilakukan hingga keseluruhan string biner masukan
diproses.
9
ada. Prinsip kerja LZW, dimulai dengan membaca karakter input satu persatu dan
diakumulasi pada sebuah string A. Lalu dilakukan pencarian dalam dictionary, apakah
terdapat string A. Selama string A ditemukan didalam dictionary, string ini ditambahkan
dengan satu karakter berikutnya, lalu dicari lagi dalam dictionary.
2.7.3 Dictionary
Melakukan inisialisasi untuk pertama kalinya terhadap karakter-karakter dasar huruf
alphabet. Pembacaan input stream dilakukan per-byte karena setiap byte memiliki alamat
yang unik dalam memory, secara default dictionary menyediakan 256 pointer awal yang
dimulai dari 0-255 untuk pengkodean ASCII sedangkan jumlah pointer untuk string yang
terbentuk setelah membaca input stream dapat ditentukan dari besarnya bit yang dipakai yang
dapat dirumuskan dengan rumus 2n - 256 dimana n menyatakan jumlah bit yang dipakai dan
256 menyatakan karakter-karakter ASCII yang telah diinisialisasi.
Indek untuk string baru yang terbentuk diperoleh dari nilai selanjutnya yang tersedia
didalam memory.
11
menggunakan 9 bit untuk ukuran dictionary maka dimungkinkan terdapat 512 256 = 256
code word untuk masing-masing string hasil dari kombinasi karakter yang dihasilkan
dictionary LZW selain 256 karakter ASCII.
Ketika sebuah nilai n bit telah ditentukan sebagai dictionary maka selama indek masih
tersedia untuk string baru yang terbentuk maka selama itu pula indek tetap menggunakan
format dengan besar n bit akan tetapi jika jumlah dari string baru yang terbentuk melebihi
jumlah indek dalam dictionary maka akan terjadi transisi besar bit yang dipakai untuk
merepresentasikan indek baru yang dari semula menggunakan n bit menjadi n + 1 bit atau
inisialisai dengan bit lain agar kmampu menampung string baru.
Algoritma kompresi LZW secara lengkap :
1. KAMUS diinisialisasi dengan semua karakter dasar yang ada :
{A..Z,a..z,0..9}.
2. W = karakter pertama dalam stream karakter.
3. K = karakter berikutnya dalam stream karakter.
4. Lakukan pengecekan apakah (W+K) terdapat dalam KAMUS
Jika ya, maka W = W + K (gabungkan W dan K menjadi string baru).
Jika tidak, maka
Output sebuah kode untuk menggantikan string W.
Tambahkan string (W+ K) ke dalam dictionary dan berikan nomor/kode
berikutnya yang belum digunakan dalam dictionary untuk string tersebut.
W=K
Lakukan pengecekan apakah masih ada karakter berikutnya dalam stream
karakter
Jika ya, maka kembali ke langkah 2.
Jika tidak, maka output kode yang menggantikan string W, lalu terminasi
proses (stop).
12
Sebagai contoh, string ABBABABAC akan dikompresi dengan LZW. Isi
dictionary pada awal proses diset dengan 3 karakter dasar yang ada: A, B, dan C.
Tahapan proses kompresi ditunjukkan pada Tabel 2.
Tabel 2 Tahapan Kompresi LZW
13
Gambar 2.5 Hasil Proses Kompresi LZW
Secara umum, transisi ditandai dengan 0/p atau 1/q dimana p dan q menunjukan
jumlah transisi dari state dengan input 0 dan 1. Nilai probabilitas bahwa input selanjutnya
bernilai 0 adalah p/(p+q) dan input selanjutnya bernilai 1 adalah q/(p+q). Lalu bila bit
sesudahnya ternyata bernilai 0, jumlah bit 0 ditransisi sekarang ditambah satu menjadi p+1.
14
Begitu pula bila bit sesudahnya ternyata bernilai 1, jumlah bit 1 ditransisi sekarang ditambah
satu menjadi q+1.
Masalah tidak terdapatnya kemunculan suatu bit pada state dapat diatasi dengan
menginisialisasi model awal state dengan satu. Probabilitas dihitung menggunakan frekuensi
relatif dari dua transisi yang keluar dari state yang baru.
Jika frekuensi transisi dari suatu state t ke state sebelumnya, yaitu state u, sangat
tinggi, maka state t dapat di-cloning. Ambang batas nilai cloning harus disetujui oleh encoder
dan decoder. State yang di-cloning diberi simbol t (lihat Gambar 4 dan 5). Aturan cloning
adalah sebagai berikut :
Semua transisi dari state u dikirim ke state t. Semua transisi dari state lain ke state t
tidak berubah.
Jumlah transisi yang keluar dari t harus mempunyai rasio yang sama (antara 0 dan 1)
dengan jumlah transisi yang keluar dari t.
Jumlah transisi yang keluar dari t dan t diatur supaya mempunyai nilai yang sama
dengan jumlah transisi yang masuk.
Gambar 2.7 Model Markov sebelum cloning
15
Gambar 2.8 Model Markov Setelah cloning
2.9 Perbandingan Kinerja Algoritma Huffman dengan Algoritma LZW dan DMC
Jika kinerja algoritma Huffman dibandingkan dengan Algoritma LZW dan DMC, maka akan
diperoleh hasil seperti dibawah ini :
Gambar 2.9 Box Plot Rasio Kompresi Algoritma Huffman, LZW dan DMC
Gambar 2.10 Box Plot kecepatan Kompresi Algoritma Huffman, LZW dan DMC
16
Gambar 2.11 Grafik perbandingan Rasio kompresi Algoritma Huffman, LZW dan DMC.
Gambar 2.12 Grafik perbandingan Kecepatan Kompresi Algoritma Huffman, LZW dan DMC.
Dari grafik di atas, dapat kita lihat bahwa secara rata-rata algoritma DMC
menghasilkan rasio file hasil kompresi yang terbaik (41.5% 25.9), diikuti algoritma
LZW (60.2% 28.9) dan terakhir algoritma Huffman (71.4% 15.4).
Dan dari grafik di atas juga, dapat kita lihat bahwa secara rata-rata algoritma
LZW membutuhkan waktu kompresi yang tersingkat (kecepatan kompresinya = 1139
KByte/sec 192,5), diikuti oleh algoritma Huffman (555,8 KByte/sec 55,8), dan
17
terakhir DMC (218,1 KByte/sec 69,4). DMC mengorbankan kecepatan kompresi
untuk mendapatkan rasio hasil kompresi yang baik. File yang berukuran sangat besar
membutuhkan waktu yang sangat lama bila dikompresi dengan DMC
KESIMPULAN
1. Algoritma Huffman dapat digunakan sebagai dasar untuk kompresi data, dan
pengaplikasiannya cukup mudah serta dapat digunakan dalam berbagai jenis data.
18
2. Secara rata-rata algoritma DMC menghasilkan rasio file hasil kompresi yang terbaik
(41.5% 25.9), diikuti algoritma LZW (60.2% 28.9) dan terakhir algoritma
Huffman (71.4% 15.4)
3. Secara rata-rata algoritma LZW membutuhkan waktu kompresi yang tersingkat
(kecepatan kompresinya = 1139 KByte/sec 192,5), diikuti oleh algoritma Huffman
(555,8 KByte/sec 55,8), dan terakhir DMC (218,1 KByte/sec 69,4). DMC
mengorbankan kecepatan kompresi untuk mendapatkan rasio hasil kompresi yang
baik. File yang berukuran sangat besar membutuhkan waktu yang sangat lama bila
dikompresi dengan DMC.
4. Jika dibandingkan dengan algoritma LZW dan DMC, dalam kompresi data, algoritma
Huffman masih kalah dalam hal rasio kompresi data maupun kecepatan kompresinya.
Daftar Pustaka
[1] [2] [3] [4] [5] [6] [8] [9] [10] Paper Mahasiswa. Universitas Sumatera Utara.
http://repository.usu.ac.id/bitstream/handle/123456789/61929/Chapter
%20II.pdf;jsessionid=1D2F447E1C344D1C0F922AC57174CB7D?sequence=4
19
[3] Yoga Aji, Yudistira., Darwiyanto, Eko., Septiana, Gia.(2016). Analisis Perbandingan
Kompresi dan Dekompresi Menggunakan Algoritma ShannonFano 2 Gram Dan Lempel Ziv
Welch Pada Terjemahan Hadits Shahih Muslim.
[7]Meilinda, Devi.Algoritma Kompresi yang Ada Saat Ini.18 April 2012.
https://devimeilinda.wordpress.com/2012/04/18/algoritma-kompresi-yang-ada-saat-ini/
20