Anda di halaman 1dari 20

ABSTRAK

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

2.1 Sejarah Kompresi


[2]Kompresi data merupakan cabang ilmu komputer yang bersumber dari Teori
Informasi. Teori Informasi sendiri adalah salah satu cabang Matematika yang berkembang
sekitar akhir dekade 1940-an. Tokoh utama dari teori informasi adalah Claude Shannon dari
Bell Laboratory. Teori Informasi memfokuskan pada berbagai metode tentang informasi
termasuk penyimpanan dan pemrosesan pesan. Teori informasi mempelajari pula tentang
redundancy (informasi tak berguna) pada pesan. Semakin banyak redundancy semakin besar
pula ukuran pesan, upaya mengurangi redundancy inilah yang akhirnya melahirkan subyek
ilmu tentang kompresi data.

2.2 Kompresi Data


[3]Kompresi data adalah ilmu atau seni merepresentasikan informasi dalam bentuk
yang lebih compact. [4]Beberapa defenisi kompresi yaitu, kompresi adalah proses
pengolahan sekumpulan data menjadi suatu bentuk untuk menghemat kebutuhan tempat
penyimpanan data waktu untuk transmisi data (Utami, 2013). Sedangkan menurut Sukiman
dan Chandra (2013) kompresi data atau juga dikenal sebagai pemadatan data adalah teknik
yang dipakai untuk mengurangi data atau memperkecil data menjadi bentuk data lain dimana
data tersebut diubah menjadi simbol yang lebih sederhana. Kompresi data dilakukan untuk
mereduksi ukuran data atau file.
Dari beberapa defenisi diatas dapat disimpulkan bahwa kompresi dapat digunakan
untuk meminimalisasi ukuran dari data yang akan disimpan sehingga menghemat ukuran
penyimpanan. Data yang telah dikompresi akan mengalami penyusutan ukuran tanpa
mempengaruhi informasi yang ada didalamnya.

2.3 Tujuan Kompresi [5]


Tujuan daripada kompresi data tidak lain adalah untuk mengurangi data berlebihan
tersebut sehingga ukuran data menjadi lebih kecil dan lebih ringan dalam proses transmisi.
Tujuan dari kompresi data adalah untuk mewakili sumber data yang berbentuk digital dengan
beberapa bit yang mungkin dapat memenuhi persyaratan minimum untuk rekonstruksi file
aslinya.

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).

2.5 Teknik Kompresi [6]


Ada beberapa faktor yang sering menjadi pertimbangan dalam memilih suatu metode
kompresi yang tepat, yaitu kecepatan kompresi, sumber daya yang dibutuhkan (memori,
kecepatan PC), ukuran file hasil kompresi, besarnya redudansi, dan kompleksitas algoritma.
Pada teknik kompresi terbagi menjadi dua bagian yaitu kompresi lossy dan kompresi lossless.
2.5.1 Kompresi lossy (lossy compression)
Kompresi data yang bersifat lossy mengijinkan terjadinya kehilangan sebagian
data tertentu dari pesan tersebut, sehingga dapat menghasilkan rasio kompresi yang
tinggi (Putra, 2009). Sedangkan menurut Wiryadinata (2007) Lossy compression
memiliki perubahan antara stream data masukan dan stream data keluaran, pada
proses secara lossy ini banyak digunakan pada kompresi jenis citra dan audio.
Alasan mengapa kompresi lossy banyak digunakan pada kompresi jenis citra
dan audio, karena hasil kompresi dengan data aslinya terlihat hampir sama meskipun
dengan menggunakan kompresi lossy ada data yang hilang dari file aslinya. Ilustrasi
kompresi lossy ditunjukkan pada gambar 1.1.

4
Gambar 1.1 Ilustrasi Kompresi Lossy

2.5.2 Kompresi lossless (lossless compression)


Lossless compression tidak terjadi perubahan antara stream data masukan dan
stream data keluaran, proses kompresi secara lossless ini merupakan salah satu
klasifikasi yang sering ditemukan pada kompresi jenis text, executable file, dan
beberapa data citra (.gif, .png, .bmp, .pcx dan lain-lain) (Wiryadinata, 2007). Ilustrasi
kompresi lossless dapat dilihat pada gambar 1.2

Gambar 1.2 Ilustrasi Kompresi Lossless

[7]Algoritma kompresi dikatakan lossless atau disebut juga


reversible jika dimungkinkan untuk membentuk data asli yang tepat sama
dari data yang sudah dikompresi. Tidak ada informasi yang hilang selama
proses kompresi dan dekompresi. Teknik ini digunakan jika data tersebut
sangat penting, jadi tidak di mungkinkan untuk menghilangkan beberapa
detail. Untuk kompresi Lossless, berdasarkan cara mereduksi data yang
akan dikompresi, terbagi lagi menjadi 2 kelompok besar algoritma:
1. Algoritma berbasis Entropi
Algoritma berbasis Entropi, atau disebut juga berbasis statistik,
menggunakan model statistik dan probabilitas untuk memodelkan data,

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.

2. Algoritma berbasis dictionary


Algoritma berbasis dictionary, bekerja dengan cara menyimpan pola
masukan sebelumnya, dan menggunakan index dalam mengakses pola
tersebut jika terdapat perulangan. Contoh algoritma yang berbasis
dictionary adalah: LZ77, LZ78, LZW, DEFLATE, dan LZMA.

2.6 Algoritma Huffman

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

2.6.1 Sekilas Sejarah dan perkembangan


Algoritma Huffman dicetuskan pertama kali oleh D.A Huffman pada tahun 1950.
Algoritma ini merupakan pengembangan dari algoritma yang berfungsi sebagai algoritma
kompresi yang ditulis oleh R.M. Fano dan Calude Shannon. Algoritma ini memanfaatkan
grafik dan pohon biner.
Graf yang dapat dibuat sebagai pohon merentang dan dapat membentuk pohon biner.
Sedangkan pohon biner digunakan untuk dasar pembentukan kode. Pohon biner yang
digunakan haruslah merupakan kumpulan dari kode awalan. Kode awalan merupakan kode
yang sedemikian sehingga tidak ada anggota kumpulan yang merupakan awalan dari
6
himpunan anggota lainnya. Contohnya {000, 001, 01,10,11}. Dikatakan bukan merupakan
kode awalan apabila anggota himpunannya dapat membentuk anggota lainnya sehingga dapat
menimbulkan keambiguan. Contoh yang bukan merupakan kode awalan adalah {1, 00, 01}.
Kode awalan digunakan untuk menghindari keambiguan, karena akan sangat berguna untuk
kompresi data yang menggunakan panjang bit yang berbeda-beda.
Ide dasar dari algoritma Huffman adalah membuat kode dengan representasi bit yang
lebih pendek untuk karakter ASCII yang sering muncul di dalam file dan membuat kode
dengan representasi bit yang lebih panjang untuk karakter ASCII yang jarang muncul di
dalam file . Jadi, algoritma Huffman menggunakan kode yang lebih kecil pada karakter yang
sering digunakan dan kode yang lebih panjang untuk karakter yang tidak begitu sering
digunakan.

2.6.2 Prinsip Kerja [8]


Pada dasarnya cara kerja dari algoritma Huffman adalah membuat sebuah binary tree
yang disebut dengan Huffman Tree. Berikut ini cara kerja kompresi dari algoritma Huffman:
1. Membuat daftar simbol yang muncul pada pesan dan menghitung peluang
(probabilitas) kemunculannya.
2. Setelah membuat daftar simbol beserta probabilitas kemunculannya , kemudian
mengurutkan simbol yang muncul pada pesan yang akan dikirim dimulai dari
probabilitas yang terkecil sampai terbesar.
3. Setelah mengurutkan probabilitasnya, kemudian mengambil dua simbol dengan
probabilitas terkecil lalu menggabungnya menjadi satu set. Dua simbol yang
memiliki probabilitas terkecil tersebut dipisahkan dari simbol yang probabilitasnya
besar.
4. Dua simbol yang probabilitasnya terkecil lalu digantikan dengan simbol baru yang
merepresentasaikan kedua simbol tersebut, dimana nilai probabilitasnya adalah
jumlah probabilitas dari keduanya.
5. Ulang langkah a,b,c hingga daftar simbol tinggal satu anggota (satu pohon huffman)

Gambar 2.1

Terdapat 3 tahapan dalam menggunakan algoritma Huffman, yaitu:


7
1. membentuk pohon Huffman
2. melakukan encoding dengan menggunakan pohon Huffman, dan
3. melakukan decoding

Algoritma Huffman Secara Lengkap


1. Pilih dua simbol dengan peluang (probability) paling kecil (pada contoh di atas
simbol B dan D). Kedua simbol tadi dikombinasikan sebagai simpul orangtua
dari simbol B dan D sehingga menjadi simbol BD dengan peluang 1/7 + 1/7
= 2/7, yaitu jumlah peluang kedua anaknya.
2. Selanjutnya, pilih dua simbol berikutnya, termasuk simbol baru, yang
mempunyai peluang terkecil.
3. Ulangi langkah 1 dan 2 sampai seluruh simbol habis. Sebagai contoh, dalam
kode ASCII string 7 huruf ABACCDA membutuhkan representasi 7 8 bit
= 56 bit (7 byte), dengan rincian sebagai berikut:

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.

Gambar 2.2 Pohon Huffman Untuk ABBCDA

Tabel 1. Kode Huffman

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.

2.7 Algortitma LZW [9]


Algoritma Lempel-Ziv-Welch (LZW), dikembangkan oleh Abraham Lempel,
Jacob Ziv, dan Terry Welch. Dan dipublikasikan pada tahun 1984 oleh Terry Welch.
Algoritma ini mereduksi jumlah token yang dibutuhkan menjadi 1 simbol saja. Simbol ini
merujuk kepada index dalam dictionary. LZW mengisi dic tionary ini dengan seluruh simbol
alphabet yang dibutuhkan. Pada kasus yang umum, 256 index pertama dari dictionary akan
diisi dengan karakter ASCII dari 0-255. Karena dictionary telah diisi dengan semua
kemungkinan karakter
terlebih dahulu, maka karakter inputan pertama akan selalu dapat ditemukan dalam
dictionary. Inilah yang menyebabkan token pada LZW hanya memerlukan 1 simbol
saja yang merupakan pointer pada dictionary.
Algoritma ini mengeluarkan output berupa indeks 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

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.1 Sekilas sejarah dan perkembangan


Algoritma LZW dikembangkan oleh Terry A.Welch dari metode kompresi
sebelumnya yang ditemukan oleh Abraham Lempel dan Jacob Ziv pada tahun 1977.
Algortima ini menggunakan teknik dictionary dalam kompresinya. Dimana string karakter
digantikan oleh kode table yang dibuat setiap ada string yang masuk. Tabel dibuat untuk
referensi masukan string selanjutnya. Ukuran tabel dictionary pada algoritma LZW asli
adalah 4096 sampel atau 12 bit, dimana 256 sampel pertama digunakan untuk table karakter
single (Extended ASCII), dan sisanya digunakan untuk pasangan karakter atau string dalam
data input.
Algoritma LZW melakukan kompresi dengan mengunakan kode table 256 hingga
4095 untuk mengkodekan pasangan byte atau string. Dengan metode ini banyak string yang
dapat dikodekan dengan mengacu pada string yang telah muncul sebelumnya dalam teks.

2.7.2 Prinsip Kerja


Prinsip umum kerja algoritma LZW adalah mengecek setiap karakter yang muncul
kemudian menggabungkan dengan karakter selanjutnya menjadi sebuah string jika string baru
tersebut tidak berada dalam dictionary atau belum diindekkan maka string baru tersebut akan
diindekkan ke dalam dictionary. Dibawah merupakan pseudocode kompresi algoritma LZW.

Gambar 2.3 Pseudocode Kompresi Algoritma LZW

Langkah pengkompresian LZW


1. Inisialisasi input stream yang mengandung karakter-karekter dasar.
10
2. Membaca karakter dari input stream jika EOF maka menuju langkah 5.
3. Gabungkan karater awal dengan karakter yang dibaca selanjutnya menjadi sebuah
string.
4. Jika string baru ini tidak ada dalam dictionary maka
Buat indek baru untuk string baru tersebut
Menuju Langkah 2.
5. Jika string yang terbentuk telah mempunyai indek di dalam dictionary maka
Gabungkan karakter sebelumnya dengan karakter yang dibaca atau string yang
telah terbentuk menjadi sebuah string baru.
Menuju langkah 2.
6. Tulis output kode

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.

2.7.4 Code Words


Code word merupakan kode yang bersifat unik yang mewakili karakter atau string
baru yang terbentuk setiap kali algoritma LZW memproses inputan, seperti yang telah
disebutkan sebelumnya jumlah dari string-string yang terdapat dalam dictionary ditentukan
dari besarnya bit dictionary yang dipakai dimana code word mewakili setiap string-string
tersebut, semakin banyak string yang dihasilkan maka semakin besar pula bit dictionary yang
dibutuhkan untuk memberikan indek bagi setiap string yang dihasilkan.
Sebagai contoh representasi code word dalam dictionary dengan besar 9 bit untuk
karakter A yang mempunyai nilai 63 adalah 001000001, selain itu jika code word
mempunyai nilai 245 dalam dictionary-nya maka kode binernya adalah 011110101, dengan

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).

2.7.5 Flow Chart Algoritma LZW


Gambar 2.4 Flowchart Algoritma LZW

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

Kolom posisi menyatakan


posisi sekarang
dari stream karakter dan
kolom karakter menyatakan karakter yang terdapat pada posisi tersebut. Kolom dictionary
menyatakan string baru yang sudah ditambahkan kedalam dictionary dan nomor indeks
untuk string tersebut ditulis dalam kurung siku. Kolom output menyatakan kode output yang
dihasilkan oleh langkah kompresi. Hasil proses kompresi ditunjukkan pada Gambar 2.4

13
Gambar 2.5 Hasil Proses Kompresi LZW

2.8 Algoritma DMC [10]


2.8.1 Sekilas Sejarah dan Perkembangan
Algoritma DMC (Dynamic Markov Compression) adalah algoritma kompresi data
lossless dikembangkan oleh Gordon Cormack dan Nigel Horspool. Algoritma ini
menggunakan pengkodean aritmetika mirip dengan prediksi oleh pencocokan sebagian
(PPM), kecuali bahwa input diperkirakan satu bit pada satu waktu (bukan dari satu byte pada
suatu waktu). DMC memiliki rasio kompresi yang baik dan kecepatan moderat, mirip dengan
PPM, tapi memerlukan sedikit lebih banyak memori dan tidak diterapkan secara luas.
Beberapa implementasi baru-baru ini mencakup program kompresi eksperimental pengait
oleh Nania Francesco Antonio, ocamyd oleh Frank Schwellinger, dan sebagai submodel di
paq8l oleh Matt Mahoney. Ini didasarkan pada pelaksanaan tahun 1993 di C oleh Gordon
Cormack.

2.8.2 Prinsip Kerja


Pada DMC, simbol alfabet input diproses per bit, bukan per byte. Setiap output
transisi menandakan berapa banyak simbol tersebut muncul. Penghitungan tersebut dipakai
untuk memperkirakan probabilitas dari transisi. Contoh: pada Gambar 3, transisi yang keluar
dari state 1 diberi label 0/5, artinya bit 0 di state 1 terjadi sebanyak 5 kali.

Gambar 2.6 Sebuah model yang diciptakan oleh metode DMC

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.

Algoritma Kompresi ADC :


1. s = 1 ( jumlah state sekarang)
2. t = 1 (state sekarang)
3. T[1][0] = T[1][1] = 1 (model inisialisasi)
4. C[1][0] = C[1][1] = 1 (inisialisasi untuk menghindari masalah frekuensi nol)
5. Untuk setiap input bit e :
u=t
t = T[u][e] (ikuti transisi)
Kodekan e dengan probabilitas : C[u][e] / (C[u][0] + C[u][1])
C[u][e] = C[u][e]+1
Jika ambang batas cloning tercapai, maka :
6. s = s + 1 (state baru t)
7. T[u][e] = s ; T[s][0] = T[t][0] ; T[s][1] = T[t][1]
8. Pindahkan beberapa dari C[t] ke C[s]

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

Anda mungkin juga menyukai