38 mempercepat proses inisialisasi karakter yang lebih sering muncul dalam sebuah
string, yang tentu saja akan berpengaruh saat
encoding
dan
decoding
kode Huffman.
Kelebihan kompresi data menggunakan Kode Huffman adalah: 1. Kompresi menggunakan kode Huffman merupakan kompresi
Lossless
sehingga pada saat data yang telah terkompresi didekompresikan, maka data tersebut akan sama dengan data aslinya. Hal ini baik digunakan pada
kompresi data berupa teks karena tidak akan mengurangi nilai dari data tersebut.
2. Proses kompresi menggunakan kode Huffman lebih sederhana dibandingkan dengan kompresi menggunakan metode lain.
3. Persentase kompresi menggunakan Kode Huffman pada kompresi data berupa teks berkisar hingga 45.
4.2 Variasi Kode Huffman
Ada beberapa variasi dari kode Huffman, beberapa diantaranya menggunakan algoritma yang sama dengan algoritma pembentukan kode
Huffman, beberapa yang lain menemukan kode awalan yang lebih optimal. Berikut adalah beberapa variasi dari kode Huffman:
1. Kode Huffman
n
-ary Algoritma Huffman
n
-ary menggunakan
alphabet
{0,1, …, n-1} untuk
encoding
suatu pesan dan membuat pohon
n
-ary. Pendekatan ini adalah ide awal David Huffman. Algoritma sama dengan yang
digunakan untuk Kode Huffman biner n=2, kecuali n buah simbol
Universitas Sumatera Utara
39 yang paling sedikit kemunculannya diambil secara bersamaan, tidak
diambil 2 yang paling sedikit saja. Untuk n2, tidak semua himpunan kata-kata sumber dapat membentuk pohon n-ary untuk kode Huffman
dengan benar. Pada kasus ini, tambahan probabilitas 0 harus ditambahkan. Hal ini dilakukan karena pohonnya harus membentuk
kontraktor n ke 1. Kode biner memiliki kontraktor 2 ke 1, himpunan kata berukuran berapa pun dapat membentuk kontraktor ini.
2. Kode Huffman Adaptif Variasi ini menghitung probabilitas secara dinamis berdasarkan
frekuensi terakhir dari
string
sumber adaptif. Ide dasar kode Huffman adaptif ini adalah meringkas tahapan algoritma Huffman tanpa perlu
menghitung jumlah karakter keseluruhan dalam membangun pohon biner. Algoritma ini dikembangkan oleh Faller, Gallager dan Knuth
yang kemudian dikembangkan lebih lanjut oleh Vitter, sehingga tercipta dua buah kode Huffman adaptif, yaitu:
a. Algoritma FGK b. Algoritma V
3. Algoritma Lain yang Menggunakan Dasar Algoritma Huffman Sering kali bobot yang digunakan dalam implementasi Kode
Huffman mempresentasikan probabilitas numerik, namun ada juga beberapa contoh pembentukan Kode Huffman yang hanya memerlukan
suatu cara untuk mengurutkan bobot kemudian menjumlahkannya.
Universitas Sumatera Utara
40 Beberapa algoritma lain yang menggunakan dasar dari algoritma
Huffman, bobotnya bisa apa pun misalnya harga, frekuensi, bobot sepasang, bobot yang tidak numerik dan metode kombinasi yang lain
tidak hanya penjumlahan. Algoritma ini dapat menyelesaikan masalah minimalisasi yang lain, misalnya meminimalisasi pada
design
rangkaian digital.
4. Kode Huffman dengan Panjang Dibatasi Ini adalah salah satu variasi kode Huffman yang tujuannya sama,
yaitu membangun pohon biner dengan panjang lintasan minimum, tetapi yang membedakannya adalah panjang kode Huffman harus lebih
kecil dari konstanta tertentu yang telah ditentukan.
5. Kode Huffman dengan Bobot Sumber Tidak Sama Pada masalah penentuan kode Huffman yang biasa, diasumsikan
setiap karakter pada sumber memiliki bobot yang sama. Kode biner dengan bobot N akan selalu berbobot N, tidak peduli berapa banyak
digitnya yang 0 dan berapa banyak digitnya yang 1. Dengan asumsi seperti ini, meminimalisasikan harga total suatu pesan sama dengan
meminimalisasi jumlah digit total. Kode Huffman dengan bobot sumber tidak sama adalah
generalisasinya, dimana asumsi tersebut tidak berlaku. Karakter- karakter pada sumber panjangnya bisa berbeda-beda, karena adanya
karakteristik tertentu dari medium pengirim. Contohnya adalah
Universitas Sumatera Utara
41
encoding alphabet
pada Kode Morce, d imana sebuah „-„ garis
memakan waktu pengiriman yang lebih lama dibandingkan sebuah „.‟ titik, dengan demikian bobot garis dalam pengiriman lebih besar.
Tujuannya masih sama, yaitu meminimalisasikan panjang kode rata- rata, tetapi tidak cukup dengan hanya meminimalisasi jumlah simbol
yang digunakan dalam suatu pesan. Belum ada algoritma yang diketahui dapat menyelesaikan masalah ini dengan tingkat efisiensi
yang sama dengan Kode Huffman yang konvensional.
6. Pohon biner Alfabetis Kode Hu-Tucker Pada masalah penentuan Kode Huffman yang biasa, diasumsikan
bahwa setiap kode dapat mengacu pada simbol apapun pada sumber. Pada versi alfabetis ini, urutan alfabetis pada sumber dan hasil
encoding
harus sama. Kode Hu-Tucker ini sering digunakan sebagai pohon pencarian biner BST
Binary Search Tree
.
7. Kode Huffman Kanonik Kode yang didapatkan dari sumber yang diurutkan kembali, yang
disebut Kode Huffman kanonik ini adalah kode yang sering digunakan, karena kemudahannya dalam
encoding
dan
decoding
. Teknik menentukan kode ini sering disebut Kode Huffman-Shannon-Fano,
karena optimalitasnya seperti Kode Huffman dan probabilitas bobotnya yang alfabetis seperti Kode Shannon-Fano.
Universitas Sumatera Utara
42
4.3
Encoding
dan
Decoding
Menggunakan Kode Huffman
Pada setiap model kompresi, dilakukan proses konversi simbol dari representasi
string
menjadi representasi kode lain dan sebaliknya. Ada dua alat konversi dalam hal ini, yaitu
encoder
dan
decoder. Encoder
merupakan alat untuk menjalankan suatu mekanisme untuk melakukan konversi simbol dari representasi
string
menjadi suatu representasi kode lainnya yang bersifat unik. Mekanisme yang dilakukan oleh
encoder
disebut
encoding
. Sedangkan
decoder
merupakan alat yang menjalankan suatu mekanisme untuk mengembalikan representasi unik
dari suatu
string
menjadi sebuah representasi
string
awalnya. Mekanisme yang dilakukan
encoder
adalah
decoding
.
4.3.1
Encoding
Pembentukan pohon Huffman adalah untuk membuat
prefix code
, yaitu kode berupa
string
biner dimana kode yang satu bukan merupakan awalan dari kode yang lain, sehingga pembentukan kode biner setelah dikompresi tidak
menghasilkan kode yang sama. Secara garis besar proses kompresi dimulai dengan membuat pohon Huffman, setelah itu mengubah setiap karakter menjadi
kode biner dan menyimpan kembali menjadi karakter yang lain karena ada pengerutan jumlah bit.
Yang perlu diperhatikan adalah penyimpanan pohon Huffman, jika terjadi kesalahan maka
file
kompresi tidak akan terbaca. Berikut adalah Algoritma Huffman:
1. Baca SMS yang akan di
encoding
SMS yang akan dikirimkan 2. Hitung frekuensi dari setiap karakter yang ada.
Universitas Sumatera Utara
43 3. Urutkan dari frekuensi kemunculan yang terkecil hingga yang terbesar.
4. Buat pohon Huffman dengan cara : a. Setiap karakter dinyatakan sebagai pohon bersimpul tunggal dan
setiap karakter disertai dengan jumlah frekuensi kemunculannya. b. Gabungkan dua pohon dengan frekuensi terkecil pada sebuah akar.
c. Setelah digabungkan akar tersebut akan mempunyai frekuensi yang merupakan jumlah frekuensi dari dua pohon penyusun tersebut.
d. Ulangi hingga hanya tersisa satu buah pohon Huffman. Dan urutkan berdasarkan frekuensi dari yang terkecil ke yang terbesar.
e. Jika frekuensi kedua pohon sama, maka beri simbol 0 untuk sebelah kiri dan simbol 1 untuk sebelah kanan. Dan jika frekuensi
kedua pohon berbeda, maka beri simbol 0 untuk frekuensi yang lebih kecil dan 1 untuk frekuensi yang lebih besar.
5. Setelah pohon Huffman selesai. Urutkanlah biner yang terbentuk dari akar hingga ke karakter tunggal.
6. Urutan biner tersebut adalah kode Huffman yang menggantikan kode ASCII untuk mempresentasikan karakter tersebut.
Setelah proses
encoding
dilakukan, maka akan dapat diperoleh persentase dari kompresi dengan persamaan:
.....
4.1
Universitas Sumatera Utara
44 Dan diperoleh rasio kompresi dengan persamaan:
Cr =
.............................................
4.2
Sebagai contoh sederhana sebuah kompresi, dalam kode ASCII
string
7 huruf “ABACCDA” membutuhkan representasi 7 x 7 bit = 49 bit, dengan rincian
seperti pada Tabel 4.1.
Tabel 4.1 Frekuensi Kemunculan Karakter pada Data
karakter Frekuensi kemunculan
Kode ASCII A
3 1000001
B 1
1000010
C
2 1000011
D 1
1000100
Maka dari Tabel 4.1 pembentukan pohon Huffman untuk proses kompresi yang dapat terjadi deperlihatkan pada Gambar 4.1. Seluruh karakter beserta
frekuensi kemunculannya dapat dilihat pada gambar 4.1a, lalu dua buah karakter dengan frekuensi terkecil yaitu
“B” dan “D” digabungkan serta tambahkan kode “0” untuk
node
pertama “B” dan kode “1” untuk
node
kedua “D”. Hal ini dapat dilihat pada Gambar 4.1b. Kemudian gabungan karakter tersebut digabungkan
dengan karakter dengan frekuensi yang paling mendekati yait u “C”, karakter
gabungan tersebut yang terlihat pada Gambar 4.1c. Kemudian karakter gabungan tersebut digabungkan lagi dengan karakter “A” seperti pada Gambar
4.1d.
Universitas Sumatera Utara
45
a
b c
d
Gambar 4.1 Proses
Encoding
Menggunakan Pohon Huffman
D=1 C=2
B=1 A=3
BD=2
B=1 D=1
BCD=4
BD=2
D=1 B=1
C=2
ABCD=7
BCD=4
BD=2
D=1 B=1
C=2 A=3
1 1
1
1
1
1
Universitas Sumatera Utara
46 Gambaran yang lebih sederhana diperlihatkan pada Gambar 4.2.
A C
B D
1 1
1
Gambar 4.2 Tampilan proses
encoding
Huffman yang lebih sederhana
Dapat diperoleh hasil
encoding
tersebut, seperti pada Tabel 4.2.
Tabel 4.2 Hasil
encoding
Menggunakan Algoritma Huffman
Karakter Frekuensi kemunculan
Kode Huffman A
3
B 1
110
C 2
10
D 1
111
Dari Tabel 4.2 dapat diketahui bahwa dibutuhkan representasi 3x1 + 1x3 + 2x2 + 1x3 = 13 bit.
Maka dapat diperoleh persentase kompresi dengan menggunakan persamaan 4.1 sebesar:
Dan juga dapat diketahui rasio kompresinya dengan menggunakan persamaan 4.2, yaitu sebesar:
Cr = Cr = 10 : 3
Universitas Sumatera Utara
47 Algoritma Huffman mempunyai kompleksitas waktu On log n. Karena
dalam melakukan sekali proses itersi pada saat penggabungan dua buah pohon yang mempunyai frekuensi terkecil pada sebuah akar membutuhkan waktu Olog
n, dan proses itu dilakukan berkali-kali sampai hanya tersisa satu buah pohon Huffman itu berarti dilakukan sebanyak
n
kali.
4.3.2
Decoding
Decoding
merupakan proses mengembalikan suatu data dari suatu kode tertentu. Proses
Decoding
ini merupakan proses kebalikan dari proses
encoding
. Terdapat dua cara yang cukup cepat untuk melakukan
decoding
simbol, yaitu: 1. Membaca dari pohon Huffman
Hal ini dapat dilakukan dengan cara membaca sebuah bit dari kode binernya dan menelusuri hingga sampai pada simpul daun yang
mengandung simbol tersebut untuk setiap bitnya. Ketika suatu bit sampai pada daun suatu pohon, suatu simbol yang terkandung dalam daun tersebut
ditulis untuk
decoded
data tersebut dan mengulanginya kembali dari akar pohon tersebut. Proses
decoding
tersebut diperlihatkan pada Gambar 4.3.
Universitas Sumatera Utara
48
Gambar 4.3 Proses
Decoding
Menggunakan Pohon Huffman
2. Menggunakan Tabel Kode Huffman
Decoding
cara ini dilakukan dengan menyimpan setiap kode pada suatu tabel yang terurut berdasarkan panjang kode dan mencari kesamaan dari
setiap bit yang dibaca. Dengan menggunakan Tabel 4.2
string
”ABACCDA” tersebut akan dipresentasikan menjadi rangkaian bit: 0 110 0 10 10 111 0. Jadi jumlah
bit yang dibutuhkan hanya 13 bit. Dari Tabel 4.2 tampak bahwa kode untuk sebuah karakter tidak boleh menjadi awalan dari kode simbol yang
lain guna menghindari keraguan dalam proses
decoding
. Karena tiap kode Huffman yang dihasilkan unik, maka proses
decoding
dapat dilakukan dengan mudah. Contoh: saat membaca kode bit pertama dalam rangkaian
bit ”0110010101110”, yaitu bit ”0” dapat langsung disimpulkan
ABCD=7
BCD=4
BD=2
D=1 B=1
C=2 A=3
1
1
1
Universitas Sumatera Utara
49 merupakan pemetaan dari simbol ”A”. Kemudian baca kode bit
selanjutnya ”1”, tidak ada kode Huffman ”1”, sehingga menjadi ”11”, tidak ada juga kode Huffman
”11”, sehingga menjadi ”110”. Rangkaian ”110” adalah pemetaan dari simbol ”B” dan seterusnya.
Universitas Sumatera Utara
50
BAB V APLIKASI KOMPRESI SMS MENGGUNAKAN KODE