Variasi Kode Huffman KOMPRESI DATA MENGGUNAKAN KODE HUFFMAN

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