Anda di halaman 1dari 7

Kode Huffman dalam Komunikasi Data

Oni Soesanto, Departement of Mathematic Faculty of Sciences University of lambung Mangkurat, Indonesia Email : onis73@yahoo.com Abstract Algorithm of Huffmann is algorithm yielding data compressing by decoding data pursuant to frequency apparition of value. Data structure used to decode data is a tree binary weighted, or in the form of a Huffmans tree. Code of Huffman used for the compress of data having the character of lossless. At code of Huffman, value which often emerge to be decoded in number shorter bit, while value which seldom emerge to be decoded in number longer bit. This code yield codes variable-length with minimum redundansi. In data communications, Code of Huffmann is one of the way of in compression of data so that order or decoded archives become shorterly Keyword: Huffman Code, Huffman Algorithm, Huffman tree, Huffman Encoding, Huffman Decoding

Pendahuluan Permasalahan yang sering terjadi dalam komunikasi data adalah pesan yang dikirim seringkali ukurannya sangat besar sehingga membutuhkan waktu lama untuk proses pengiriman data. Selain itu dalam proses penyimpanan data, arsip (file) yang berukuran besar membutuhkan media penyimpanan yang besar pula. Kedua masalah tersebut dapat diatasi dengan pemampatan (compression) data, yaitu mengkodekan pesan atau isi arsip sesingkat mungkin, sehingga waktu pengiriman data relatif cepat dan media penyimpanan yang dibutuhkan relatif kecil. Salah satu algorithma yang sering digunakan dalam teknik pemampatan data adalah Kode Huffman (Huffmans Code). Proses pemampatan dengan menggunakan Kode Huffman dilakukan dengan pengkodean tiap karakter dengan rangkaian beberapa bit sehingga menghasilkan hasil yang optimal. Kode Huffman secara luas telah digunakan pada berbagai aplikasi pemampatan dan transmisi data digital, seperti pada mesin fax, modem, jaringan komputer, high-definition televition (HDTV) dan berbagai aplikasi yang berhubungan dengan transmisi data. Didalam pemampatan data, kode Huffman mampu memampatkan media penyimpan data dan waktu transmisi data antara 20%-90%. Tujuan dari penulisan makalah ini adalah untuk mengetahui keefektifan algorithma Huffman dalam pemampatan data. Untuk mencapai tujuan tersebut, penulis melakukan serangkaian kegiatan yaitu mengumpulkan data dan eferensi-referensi serta melakukan studi pustaka. Dasar Teori 1. Algorithma Huffman Algorithma Huffman, dibuat pertama kali oleh Prof. David A. Huffman (1925-1999) pada tahun 1952 sebagai desertasi Ph.D dengan publikasi berjudul A Method for the Construction of Minimum-Redundancy Codes. Algorithma Huffman menggunakan prinsip bahwa setiap karakter dikodekan dengan serangkaian bit, dimana karakter yang sering muncul dikodekan dengan rangkaian bit yang pendek dan karakter yang jarang muncul dikodekan dengan rangkian bit yang lebih panjang. [4].

Berdasarkan tipe pemetaan kode yang digunakan untuk mengubah data awal menjadi codeword, algorithma Huffman adalah algorithma yang menggunakan metode statik, yaitu selalu menggunakan pemetaan kode yang sama. Dalam metode ini ada dua fase yang harus dilalui, yaitu: fase pertama adalah menghitung probabilitas kemunculan tiap karakter dan menentukan pemetaan kodenya, dan fase kedua adalah mengubah data menjadi sekumpulan kode yang akan ditransmisikan. Berdasarkan teknik pengkodeannya, algorithma Huffman menggunakan metode symbolwise, yaitu menghitung peluang kemunculan dari setiap karakter, dimana karakter yang sering muncul diberi kode yang lebih pendek dibandingkan dengan karakter yang jarang muncul.[3] 2. Pembentukan Pohon Huffman (Huffman Tree) Kode Huffman adalah string biner yang digunakan untuk mengkodekan setiap karakter di dalam data. Kode Huffman pada dasarnya merupakan kode prefiks (prefiks code), yaitu berisi sekumpulan kode biner yang dalam hal ini tidak ada kode biner yang menjadi awal bagi kode biner yang lain. Kode prefiks biasanya direpresentasikan sebagai pohon biner yang berlabel 0 (cabang kiri) atau 1 (cabang kanan). Rangkaian bit yang terbentuk pada setiap lintasan dari akar sampai tree merupakan kode prefiks untuk karakter yang berpadanan. Pada awalnya David Huffman hanya menencoding karakter dengan hanya menggunakan pohon biner biasa, namun setelah itu David Huffman menemukan bahwa penggunaan algoritma greedy dapat membentuk kode prefiks yang optimal.[5] Penggunaan algoritma greedy pada algoritma Huffman adalah pada saat pemilihan dua pohon dengan frekuensi terkecil dalam membuat pohon Huffman. Algoritma greedy ini digunakan pada pembentukan pohon Huffman agar meminimumkan total cost yang dibutuhkan. Cost yang digunakan untuk menggabungkan dua buah pohon pada akar setara dengan jumlah frekuensi dua buah pohon yang digabungkan, oleh karena itu total cost pembentukan pohon Huffman adalah jumlah total seluruh penggabungan. Penggabungan dua buah pohon dilakukan setiap langkah dan algoritma Huffman selalu memilih dua buah pohon yang mempunyai frekuensi terkecil untuk meminimumkan total cost. Oleh karena itu algoritma Huffman adalah salah satu contoh algoritma yang menggunaan dari algoritma Greedy. Langkah-langkah pembentukan pohon Huffman adalah sebagai berikut: 1. Baca semua karakter di dalam data untuk menghitung frekuensi kemunculan karakter. Setiap karakter penyusun teks dinyatakan sebagai pohon bersimpul tunggal.Setiap simpul di-assign dengan frekuensi kemunculan karakter. 2. Terapkan algorithma Greedy yaitu dengan menggabungkan dua buah pohon yang mempunyai frekuensi terkecil pada sebuah akar. Setelah digabungkan akar tersebut akan mempunyai frekuensi yang merupakan jumlah dari frekuensi dua buah pohon-pohon penyusunnya. 3. Ulangi langkah 2 sampai hanya tersisa satu buah pohon Huffman. Agar pemilihan dua pohon yang akan digabungkan berlangsung cepat, maka semua harus terurut naik berdasarkan frekuensinya. [6]

Sebagai contoh diberikan tabel frekuensi untuk setiap karakter sebagai berikut: No Karakter Frekuensi 1 Spasi 76 2 A 77 3 E 120 4 F 24 5 H 50 6 M 24 7 N 67 8 R 59 9 T 85 10 U 37 Tabel 1. Tabel frekuensi Dapat disusun dalam tabel:
Index Titik Frek Tree Kode 0 Sp 76 T4 0 1 A 77 T5 0 2 E 120 T7 0 3 F 24 T1 0 4 H 50 T3 0 5 M 24 T1 1 6 N 67 T4 1 7 R 59 T3 1 8 T 85 T5 1 9 U 37 T2 0 10 T1 48 T2 1 11 T2 85 T6 0 12 T3 109 T6 1 13 T4 143 T7 1 14 T5 162 T8 0 15 T6 194 T8 1 16 T7 263 T9 0 17 T8 356 T9 1 18 T9 619 -

Tabel 2. Tabel pembentukan pohon Huffman Akan dihasilkan pohon Huffman sebagai berikut: T9 T7 T8 T4 T5 T6

E Sp

T U

T2 T1

T3

H M

F
Gambar 1. Pohon Huffman

Fungsi utama pohon Huffman adalah pada proses Encoding dan Decoding data. Baik encoder dan decoder sudah sepakat untuk menggunakan Huffman tree tertentu sebelum terjadi pengiriman data. Encoder membangun Huffman tree yang

baru setiap data baru akan dikirimkan, dan mengirimkan tabel konversi bersamasama dengan data.[2] 3. Encoding Encoding adalah cara menyusun string biner dari data yang ada. Proses encoding untuk satu karakter dimulai dengan membuat pohon Huffman terlebih dahulu. Setelah itu kode untuk satu karakter dibuat dengan menyusun nama string biner yang dibaca dari akar sampai ke daun pada pohon Huffman. Algorithm Huffman pada proses Encoding suatu string biner adalah sebagai berikut: 1. tentukan karakter yang akan di encoding 2. mulai dari akar, baca setiap bit yang ada pada cabang yang bersesuaian sampai ketemu daun dimana karakter itu berada 3. ulangi langkah 2 sampai seluruh karakter di encoding Sebagai contoh, akan di encoding kata THE_HUFFMAN_TREE dengan menggunakan pohon Huffman pada gambar 1. Didapatkan tabel encoding sebagai berikut: No Karakter Kode 1 Spasi 010 2 A 100 3 E 00 4 F 11010 5 H 1110 6 M 11011 7 N 011 8 R 1111 9 T 101 10 U 1100 Tabel 3. Hasil Konversi karakter ke dalam kode Huffman Sebagai contoh dari kata THE_HUFFMAN_TREE didapatkan kode Huffman sebagai berikut:
1011110000101110110011010110101101110001101010111110000

4. Decoding Decoding adalah kebalikan dari proses Encoding, yang berarti penyusunan kembali data dari string biner menjadi data semula. Algorithma proses Decoding adalah sebagai berikut: 1. Dimulai dari akar tree 2. Baca setiap bit dari string biner 3. Untuk setiap bit yang dibaca, lakukan tranversal pada cabang tree yang bersesuaian. 4. Ulangi langkah 2 dan 3 sampai ketemu daun dan kodekan rangkaian bit yang elah dibaca dengan karakter di daun. 5. Ulangi langkah 1 sampai semua bit di dalam string dikodekan sesuai dengan karakter yang sesuai.

Dengan menggunakan pohon Huffman pada gambar 1 akan didecoding setiap bit menjadi karakter dengan langkah sebagai berikut: 1. Diawali dengan bit pertama 1, maka pointer akan mengarah ke child kanan T8 2. Dibaca bit kedua yaitu 0, maka poiter dari T8 akan dilanjutkan ke child kiri T5 3. Dari T5 dibaca lagi bit ketiga yaitu 1, maka pointer akan mengarah ke child kanan, dimana pada langkah ini berhenti pada huruf T. Sehingga dari tiga bit 101 akan didecoding dengan karakter T. 4. Kembali ke langkah 1 sampai semua bit didecoding dan didapatkan hasil akhir berupa rangkaian karakter. Sebagai contoh adalah kode Huffman berikut:
1011110000101110110011010110101101110001101010111110000

T H Dengan menggunakan pohon Huffman, proses Decoding dapat digambarkan sebagai berikut: T9 1 T7 T8 T4 0 T5 1 T6

E Sp

T U

T2 T1

T3

H M

F
Gambar 2. Proses Decoding kode Huffman

5. Kompleksitas Waktu pada Algorithma Huffman Untuk menganalisis kompleksitas waktu Algorithma Huffman diasumsikan Q pada algorithma Huffman binary min-heap. Untuk setiap C dari n karakter, yang diinisialisasi dengan Q pada algorithma Huffman dapat ditulis sebagai O(n) waktu yang digunakan dalam prosedur Build-Min-Heap. Dari perulangan akan dihitung |n| - 1 kali. Setiap proses heap membutuhkan waktu sebesar O(log n). = O(nlog n). Sehingga total kompleksitas waktu Algrithma Huffman dari suatu data dengan n karakter adalah = O(n) + O(nlog n) = O(n log n)

Dari Algorithma Huffman dapat dilihat harga O(n) dan O(n log n) sebagai berikut:[7] HUFFMAN(C) 1. n C O(n) 2. Q C 3. for i 1 to n 1 4. do alokasi titik baru z 5. left[z] x Hapus-MIN(Q) O(n log n) 6. right[z] y Hapus-MIN(Q) 7. f[z] f[x] + f[y] 8. Masukan kedalam (Q, z) 9. return EXTRACT-MIN(Q) 6. Adaptive Huffman Coding Adaptive Huffman Coding adalah metode yang secara dinamis digunakan untuk meng-update dua Huffman tree yang identik pada proses Encoding dan Decoding. Adaptive Huffman Coding dikembangkan oleh Newton Faller dan Robert G. Gallager dan diperbaiki oleh Donald Knuth dan Jeffrey S. Vitter. [5] Beberapa prinsip pada Adaptive Huffman coding, tree mencakup counter untuk setiap karakter, dan counter tersebut di-update setiap input karakter yang sesuai dikodekan. Huffman tree yang telah terbentuk akan tetap dipertahankan sebagai Huffman tree, jika tidak maka tree harus direstrukturisasi kembali. Pembahasan Efisiensi Kode Huffman dibandingkan dengan Kode ASCII Salah satu kode yang sudah ada sejak lama dan sering digunakan saat ini adalah kode ASCII (American Standard Code For Information Interchange). Pada kode ASCII ini setiap karakter dikodekan didalam kode biner sebanyak 7 bit. Sebagai contoh, dari tabel 1 diatas akan dikodekan dalam kode ASCII dan dibandingkan dengan kode Huffman sebagai berikut: Tabel 4. Konversi karakter kedalam Kode ASCII dan Kode Huffman
Karakter Spasi A E F H M N R T U Jumlah Bit Frekuensi 76 77 120 24 50 24 67 59 85 37 Kode ASCII 095 065 069 070 072 077 078 082 084 085 Kode ASCII Biner 1011111 1000001 1000101 1000110 1001000 1001101 1001110 1010010 1010100 1010101 Kode Huffman 010 100 00 11010 1110 11011 011 1111 101 1100 Kode ASCII Biner 76x7 = 532 bit 77x7 = 539 bit 120x7= 840 bit 24x7 = 168 bit 50 x7 = 350 bit 24x7 = 168 bit 67x7 = 469 bit 59x7 = 413 bit 85x7 = 595 bit 37x7 = 259 bit 4333 bit Kode Huffman 76 x 3 = 228 bit 77 x 3 = 231 bit 120 x 2 = 240 bit 24 x 5 = 120 bit 50 x 4 = 200 bit 24 x 5 = 120 bit 67 x 3 = 201 bit 59 x 4 = 236 bit 85 x 3 = 255 bit 37 x 4 = 148 bit 1979 bit

Dari data di atas dapat dilihat bahwa dengan menggunakan kode ASCII untuk proses encoding 10 karakter dibutuhkan 4333 bit, sedangkan untuk kode Huffman hanya dibutuhkan 1979 bit. Dengan menggunakan data perbandingan tersebut

maka dapat kita lihat bahwa dengan menggunakan Algorithma Huffman dapat memampatkan data hingga 54,33% jika dibandingkan dengan menggunakan kode ASCII. Kesimpulan 1. Algoritma Huffman adalah salah satu algoritma kompresi, yang banyak digunakan dalam kompresi teks pada komunikasi data. 2. Tahapan-tahapan dalam menggunakan algoritma Huffman, adalah membentuk pohon Huffman, melakukan encoding dengan menggunakan pohon Huffman, dan melakukan decoding 3. Algoritma Huffman adalah salah satu algoritma yang menggunakan prinsip algoritma greedy dalam penyusunan pohon Huffman 4. Algoritma Huffman mempunyai kompleksitas waktu O(n log n). 5. Dibandingkan dngan pengkodean ASCII, kode Huffman jauh lebih efektif dalam memampatkan data. Saran Untuk mengetahui kelebihan dan keefektifan Algorithman Huffman serta metode perbaikannnya sebaiknya digunakan algorithma Huffman yang lebih dinamis, salah satunya adalah Adaptive Huffman Coding. Referensi [1] Adaptive Huffman, http://www.cs.sfu.ca/cs/CC/365/li/squeeze/AdaptiveHuff.html [2] An Application of Binary Trees: Huffman Code Construction, http://www. lcm.csa.iisc.ernet.in/dsa/node89.html [3] Arturo San Emeterio Campos , Implementing huffman code construction and its data structures , http://www.arturocampos.com [4] David A. Huffman: http://www.wikipedia.org/wiki/David A. Huffman atau http://www.soe.ucsc.edu/people/faculty/huffman.html [5] Jeff Erickson. Greedy Algorithm Released under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License, 2006, (http://www.creativecommons.org/licenses/by-nc-sa/2.5/) [6] Practical Huffman Coding http://www.compressconsult.com/huffman/ [7] William A. Huber, Huffman codes for compressing messages, Spring 2002, http://www.directionsmag.com/article.php?article_id=195

Anda mungkin juga menyukai