Jenis-Jenis Algoritma Kompresi Data


Algoritma kompresi untuk jenis kompresi lossless (tanpa kehilangan data) yang banyak digunakan diantaranya : Huffman, RLE, LZ77, LZ78 dan LZW. Sedangkan untuk jenis kompresi lossy (kehilangan beberapa bagian data), algoritma yang banyak digunakan antara lain: Differential Modulation, Adaptive Coding dan Discrete Cosine Transform (DCT).

   Algoritma Kompresi Huffman
            Algoritma kompresi Huffman dinamakan sesuai dengan nama penemunya yaitu David Huffman, seorang profesor di MIT (Massachusets Instuate of Technology).
            Kompresi Huffman merupakan algoritma kompresi lossless dan ideal untuk mengkompresi teks atau file program. Ini yang  menyebabkan mengapa algoritma ini banyak dipakai dalam program kompresi.
            Kompresi Huffman termasuk dalam algoritma keluarga dengan variable codeword length. Ini berarti simbol individual (karakter dalam sebuah file teks sebagai contoh) digantikan oleh urutan bit yang mempunyai suatu panjang yang nyata (distinct length). Jadi simbol yang muncul cukup banyak dalam file akan memberikan urutan yang pendek sementara simbol yang jarang dipakai akan mempunyai urutan bit yang lebih panjang.
Contoh praktis berikut ini menunjukkan cara kerja dari algoritma Huffman. Misalkan akan dikompresi potongan data seperti berikut ini:
ACDABA
Distribusi frekuensi untuk karakter di atas seperti berikut ini:
Karakter
A
B
C
D
Frekuensi
3
1
1
1

Selanjutnya dibentuk node seperti bentuk berikut ini berdasarkan frekuensi di atas, disusun mulai dari frekuensi terbesar hingga terkecil. Kemudian dibentuk pohon Huffman agar didapat kode simbol atau kode pengganti untuk karakter-karakter di atas.
Kemudian diurutkan  dari node dengan frekuensi terkecil hingga terbesar
Selanjutnya dua buah node terkecil digabung membentuk satu node baru dimana frekuensinya merupakan penjumlahan dari keduanya.
            Setelah itu diurutkan kembali berdasarkan frekuensi tiap node secara urutan menaik.
            Kemudian dua buah node terkecil digabung menjadi satu kembali untuk membentuk node baru.
Setelah itu diurutkan kembali berdasarkan frekuensi tiap node secara urutan menaik.
Kemudian dua node terakhir ini digabung membentuk satu pohon tunggal yang disebut dengan pohon Huffman dengan node paling atas merupakan root.
Langkah terakhir adalah memberikan label bit “0” untuk setiap sisi kiri dari pohon dan label bit “1” untuk setiap sisi kanan dari pohon.
Karena potongan data tersebut terdiri atas 6 karakter, maka teks tersebut terdiri atas 6 byte atau 48 bit. Dengan Huffman encoding, akan dicari simbol yang paling sering muncul (dalam kasus ini adalah karakter ‘A’ muncul sebanyak 3 kali). dan kemudian sebuah pohon (tree) akan dibentuk untuk menggantikan simbol dengan urutan bit yang lebih pendek. Pada kasus khusus ini, algoritma akan menggunakan tabel pengganti sebagai berikut: A = 1, B = 010, C = 011, D = 00. Jika code word dipakai untuk mengkompresi file, maka data yang telah dikompresi akan terlihat seperti berikut ini. ACDABA
10110010101
Ini berarti hanya 11 bit yang dipakai selain 48 bit, berarti rasio kompresi adalah 4 : 1 untuk file tersebut.
Huffman encoding dapat dioptimalkan dengan dua cara yang berbeda yaitu sebagai berikut:
1.         Adaptive Huffman Code secara dinamis mengubah code word menurut perubahan dari probabilitas dari simbol.
2.         Extended Huffman Compression dapat meng-encode grup dari simbol daripada pada melakukan encode pada simbol tunggal.
Algoritma kompresi Huffman secara umum efisien dalam mengkompresi teks atau file program. Untuk file image biasanya dipakai algoritma yang lain. Kompresi Huffman secara umum dipakai dalam program kompresi seperti PKZip, LHA, GZ, ZOO, dan ARJ. Algoritma ini juga dipakai dalam kompresi JPEG dan MPEG.
                  Adapun bentuk algoritma dari Huffman dalam membentuk sebuah pohon biner adalah sebagai berikut:
1.      Dimulai dengan penyusunan frekuensi simbol sebagai frekuensi dari pohon
2.      Jika terdapat lebih dari satu pohon:
a.       Carilah dua pohon dengan jumlah weight yang paling kecil
b.      Gabungkan dua pohon tersebut menjadi satu dan mempunyai nilai setara dengan jumlah keduanya, atur salah satunya yang bernilai paling kecil sebagai child sisi kiri dan yang lainnya sebagai child sisi kanan
3.      Lakukan langkah di atas hingga membentuk satu pohon biner tunggal
Untuk setiap child sisi kiri beri simbol ‘0’ dan beri simbol ‘1’ untuk merepresentasi child sisi kanan

Popular posts from this blog

Cara Mengatasi E31 Canon MP258

Cara Mengukur Trimpot

Persamaan Transistor Amplifier