Algoritma Kompresi


Pengantar Teknik Kompresi Data
Teknik Kompresi Data adalah Suatu teknik pemampatan data sehingga diperoleh file dengan ukuran yang lebih kecil daripada ukuran aslinya dengan cara mengkompres data tersebut melalui proses mengkodekan informasi menggunakan bit atau information-bearing unit yang lain yang lebih rendah daripada representasi data yang tidak terkodekan dengan suatu sistem encoding tertentu. Contoh sederhananya adalah menyingkat kata-kata yang sering digunakan tapi sudah memiliki konvensi umum. Misalnya: kata “yang” dikompres menjadi kata “yg”.
Tujuan dari proses pengubahan sekumpulan data menjadi bentuk kode (Kompresi data) ini adalah untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data (memperkecil kebutuhan bandwidth).
Teknik kompresi ini bisa dilakukan terhadap data teks/biner, gambar (JPEG, PNG, TIFF), audio (MP3, AAC, RMA, WMA), dan video (MPEG, H261, H263).
Secara umum, kompresi data dapat di klasifikasikan ke dalam 2 macam, yaitu :
1.          Kompresi Lossy
Teknik kompresi dimana data yang sudah dikompresi tidak dapat dikembalikan seperti data semula, dimana lossy atau distortive atau noise-incurring. Kompresi deperti ini digunakan untuk gambar dan suara dimana kehilangan (loss) data dapat diijinkan dalam kasus tertentu.

2.          Kompresi Lossless
Kompresi lossless/tanpa distorsi/tanpa noise adalah teknik kompresi untuk data seperti file progaram, file dokumen dan record basis data dimana sama sekali tidak diijinkan perbedaan antara awal (sebelum kompresi) dan data setelah dilakukan kompresi. Dengan menggunakan algoritma GZIP, proses pengompresan dilakukan dengan menggunakan prinsip pengkodean, yaitu tiap karakter dikodekan dengan rangkaian beberapa bit lalu disimpan pada sebuah dictionary.

  Macam-macam Algoritma Kompresi
1.                        LZW Algorithm
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. Algoritma kompresi LZW secara lengkap :
1. karakter dasar pada KAMUS: {‘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
5. Jika ya, maka W ß W + K (gabungkan W dan K menjadi string baru).
6. 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.
7. Lakukan pengecekan apakah masih ada karakter berikutnya dalam stream karakter
8. Jika ya, maka kembali ke langkah 2.
9. Jika tidak, maka output kode yang menggantikan string W, lalu terminasi proses (stop).

Flowchart Algoritma LZW

Sebagai contoh, string “ABBABABAC” akan dikompresi dengan LZW. Isi dictionary pada
diset dengan tiga karakter dasar yang ada: “A”, “B”, dan “C”. Tahapan proses kompresi ditunjukkan pada Tabel 2
Tabel 2 Tahapan Kompresi LZW
Langkah
Posisi
Karakter
Dictionary
Output
1
1
A
A B
1
2
2
B
B B
2
3
3
B
B A
2
4
4
A
A B A
4
5
6
A
A B A C
7
6
9
C
-
3

Kolom posisi menyatakan posisi sekarang dari karakter dan kolom karakter menyatakan karakter yang terdapat pada posisi tersebut. Kolom menyatakan string baru yang sudah ditambahkan ke dalam dictionary dan nomor indeks untuk string tersebut ditulis apakah , . awal proses Kompresi
Hasil Kompresi

Proses dekompresi data pada algoritma LZW tidak jauh berbeda dengan proses kompresinya. Pada dekompresi LZW, juga dibuat tabel dictionary dari data input kompresi, sehingga tidak diperlukan penyertaan table dictionary ke dalam data kompresi. dekompresi LZW :
1. Dictionary diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}.
2. CW kode pertama dari stream salah satu karakter dasar).
3. Lihat dictionary dan output string (string.CW) ke stream karakter.
4. PW CW; CW kode berikutnya dari stream code
5. Apakah string.CW terdapat dalam dictionary
6. Jika ada, maka : Output string CW ke stream karakter.
P ß string PW
C ß karakter pertama dari string CW
Tambahkan string (P+C) ke dalam dictionary
7. Jika tidak, maka : P ß string.PW
C ß karakter pertama dari
Output string (P+C) ke stream tambahkan string tersebut ke dalam (sekarang berkorespondensi dengan CW)
8. Apakah terdapat kode lagi di stream
9. Jika ya, maka kembali ke langkah 4.
10. Jika tidak, maka terminasi proses (stop)

 2.                         Algoritma DMC
Algoritma DMC (Dynamic Markov adalah algoritma kompresi data lossless dikembangkan oleh Gordon Cormack dan Nigel Horspool. Algoritma ini menggunakan pengkodean aritme 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. 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.
model yang diciptakan oleh metode DMC

Secara umum, transisi ditandai dengan 0/p atau 1/q dimana p dan q menunjukkan jumlah transisi dari state dengan input 0 atau 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 di transisi sekarang ditambah satu menjadi p+1. Begitu pula bila bit sesudahnya ternyata bernilai 1, jumlah bit 1 di transisi sekarang ditambah satu menjadi q+1. Algoritma kompresi DMC :
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 :
a.  u ß t
b.  t ß T[u][e] (ikuti transisi)
c. Kodekan e dengan probabilitas : C[u][e] / (C[u][0] + C[u][1])
d. C[u][e] ß C[u][e]+1
e. Jika ambang batas cloning tercapai, maka :
f. s ß s + 1 (state baru t’)
g. T[u][e] ß s ; T[s][0] ß T[t][0] ; T[s][1] ßT[t][1]
h. 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 :
1.                        Semua transisi dari state u dikirim ke state t’. Semua transisi dari state lain ke state t tidak berubah.
2.                        Jumlah transisi yang keluar dari t’ harus mempunyai rasio yang sama (antara 0 dan 1) dengan jumlah transisi yang keluar dari t.
3.                        Jumlah transisi yang keluar dari t dan t’ diatur supaya mempunyai nilai yang sama dengan jumlah transisi yang masuk
Model Markov sebelum cloning

Model Markov setelah cloning


3.                        Huffman Algorithm
Algoritma Huffman ditemukan oleh David Huffman pada tahun 1952. Algoritma ini menggunakan pengkodean yang mirip dengan kode Morse. Berdasarkan tipe kode yang digunakan algoritma Huffman termasuk metode statistic. Sedangkan berdasarkan teknik pengkodeannya menggunakan metode symbolwise. Algoritma Huffman merupakan salah satu algoritma yang digunakan untuk mengompres teks. 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 orangtuadari s imbol 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:
01000001 01000010 01000001 01000011 01000011 01000100 01000001
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.
Pohon Huffman untuk “ABACCDA”


Tabel 1 Kode Huffman
Karakter
Frekwensi
Peluang
Kode Huffman
A
3
3/7
0
B
1
1/7
110
C
2
2/7
10
D
1
1/7
111

Karakter Frekuensi Peluang Kode Huffman
A 3 3/7 0
B 1 1/7 110
C 2 2/7 10
D 1 1/7 111
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.

Perbandingan Ketiganya

Jika kinerja algoritma Huffman dibandingkan dengan Algoritma LZW dan DMC, maka akan diperoleh hasil
seperti dibawah ini:

Box Plot Rasio Kompresi Algoritma Huffman, LZW dan DMC
Box Plot Kecepatan Kompresi Algoritma Huffman, LZW dan DMC
Grafik Perbandingan Rasio Kompresi Algoritma Huffman, LZW dan DMC

Grafik Perbandingan Kecepatan Kompresi Algoritma Huffman, LZW dan DMC

Dari grafik di atas, dapat kita lihat bahwa secara ratarata 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 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.
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.

Referensi
Napitupulu ,Charles Januari;Universitas Komputer Indonesia

Komentar

  1. izin bertanya kak, rumus untuk mencari kecepatan dan rasio nya seperti apa ya kak terimakasih

    BalasHapus

Posting Komentar

Postingan Populer