BAB 2. LANDASAN TEORI 2.1. Algoritma Huffman Algortima Huffman adalah algoritma yang dikembangkan oleh David A. Huffman pada jurnal yang ditulisnya sebagai prasyarat kelulusannya di MIT. Konsep dasar dari metode Huffman adalah dengan membangun sebuah skema atau tabel yang berisikan frekuensi kemunculan masing-masing simbol. Dari tabel tersebut kemudian dibangun suatu kode-kode unik untuk mengidentifikasikan masing-masing simbol. Kode Huffman salah satu algoritma dasar untuk kompresi data, yang bertujuan untuk mengurangi jumlah Bit yang diperlukan untuk merepresentasikan informasi/pesan. Algoritma huffman merupakan algoritma yang paling terkenal untuk mengompres teks. Terdapat tiga fase dalam menggunakan algoritma Huffman untuk mengompres sebuah data, pertama adalah fase pembentukan pohon Huffman, kedua fase encoding dan ketiga fase decoding. Prinsip yang digunakan oleh algoritma Huffman adalah karakter yang sering muncul di -encoding dengan rangkaian bit yang pendek dan karakter yang jarang muncul di-encoding dengan rangkaian bit yang lebih panjang. Teknik kompresi algoritma Huffman mampu memberikan penghematan pemakaian memori sampai 30%. Algoritma Huffman mempunyai kompleksitas O(n log n) untuk himpunan dengan n karakter (Agung, 2013). 2.1.1 Pembentukan Pohon Huffman Kode Huffman pada dasarnya merupakan kode prefiks (prefix code). Kode prefiks adalah himpunan yang berisi sekumpulan kode biner, dimana pada kode prefik ini tidak ada kode biner yang menjadi awal bagi kode biner yang lain. Kode prefiks biasanya direpresentasikan sebagai pohon biner yang diberikan nilai atau label. Untuk cabang kiri pada pohon biner diberi label 0, sedangkan pada cabang kanan pada pohon biner diberi label 1. Rangkaian bit yang terbentuk pada setiap lintasan dari akar ke daun merupakan kode prefiks untuk karakter yang berpadanan. Pohon biner ini biasa disebut pohon Huffman (Agung, 2013). Langkah-langkah pembentukan pohon Huffman adalah sebagai berikut : 1. Baca semua karakter di dalam teks untuk menghitung frekuensi kemunculan setiap karakter. Setiap karakter penyusun teks dinyatakan sebagai pohon 2-1
bersimpul tunggal. Setiap simpul di-assign dengan frekuensi kemunculan karakter tersebut. 2. Terapkan strategi algoritma sebagai berikut, gabungkan dua buah pohon yang mempunyai frekuensi terkecil pada sebuah akar. Setelah digabungkan, akar tersebut akan mempunyai frekuensi yang merupakan jumlah dua buah pohonpohon penyusunnya. 3. Ulangi langkah 2 sampai hanya tersisa satu buah pohon Huffman. Agar pemilihan dua pohon yang akan digabungkan berlangsung cepat, maka semua pohon yang ada selalu terurut menaik berdasarkan frekuensi. Sebagai contoh, dalam kode ASCII string 10 huruf MERCUBUANA membutuhkan representasi 10 x 8 bit = 80 bit (10 byte), dengan rincian sebagai berikut: M = 01001101 E = 01000101 R = 01010010 C = 01000011 U = 01010101 B = 01000010 U = 01010101 A = 01000001 N = 01001110 A = 01000001 2-2
2.1.2 Proses Encoding Encoding adalah cara menyusun string biner dari teks 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 pohon Huffman. Urutan langkah proses untuk encode algoritma ini sebagai berikut : 1. Urutkan nilai-nilai grayscale berdasarkan frekuensi kemunculannya. 2. Gabung 2 buah pohon yang mempunyai frekuensi kemunculan terkecil dan urutkan kembali. 3. Ulangi langkah 2 sampai tersisa satu pohon biner. 4. Beri label pohon biner tersebut dengan cara sisi kiri pohon diberi label 0 dan sisi kanan pohon diberi label 1. 5. Telusuri pohon biner dari akar ke daun. Barisan label-label sisi dari akar kedaun adalah kode huffman. Bila dikodekan menggunakan kode Huffman, langkahnya adalah sebagai berikut : 1. Buat daftar frekuensi kemunculan tiap-tiap karakter dan urutkan dari yang terkecil hingga terbesar. Gambar 2.1 Frekuensi kemunculan 2-3
Gambar 2.2 Kode Huffman untuk karakter AUBCEMNR Penulusuran dari akar ke daun (dari atas ke bawah) menghasilkan kode Huffman berikut : 2-4
Gambar 2.3 Jumlah kemunculan bit Ukuran string sebelum pemampatan (dalam kode ASCII) adalah: = 10 x 8 bit = 80 bit Ukuran string setelah pemampatan (dalam kode Huffman) adalah: = 2 x 1 bit + 2 x 2 bit + 1 x 3 bit + 1 x 4 bit + 1 x 5 bit + 1 x 6 bit + 1 x 7 bit + 1 x 8 bit = 39 bit Rasio Pemampatan = (100% - 39/80 x 100%) = 51,25% Artinya 51,25% dari string semula telah berhasil dimampatkan. 2.1.3 Proses Decoding Decoding merupakan kebalikan dari sebuah encoding. ecoding berarti menyusun kembali data yang tersandi menjadi data aslinya. Langkahlangkah decoding suatu data yang tersandi menggunakan pohon Huffman adalah sebagai berikut : Langkah-langkah men -decoding suatu string biner dengan menggunakan pohon Huffman adalah sebagai berikut : 1. Baca sebuah bit dari string biner. 2. Mulai dari akar 3. Untuk setiap bit pada langkah 1, lakukan penelusuran pada cabang yang bersesuaian. 2-5
4. Ulangi langkah 1, 2 dan 3 sampai bertemu daun. Kodekan rangkaian bit yang telah dibaca dengan karakter di daun. 5. Ulangi dari langkah 1 sampai semua bit di dalam string habis. Sebagai contoh kita akan men-decoding string biner yang bernilai 1111111 Setelah kita telusuri dari akar, maka kita akan menemukan bahwa string yang mempunyai kode Huffman 1111111 adalah karakter R. 2.1.4 Kompleksitas Algoritma Huffman Algoritma Huffman mempunyai kompleksitas waktu O(n log n), karena dalam melakukan sekali proses itersi pada saat penggabungan dua buah pohon yang mempunyai frekuensi terkecil pada sebuah akar membutuhkan waktu O(log n), dan proses itu dilakukan berkali-kali sampai hanya tersisa satu buah pohon Huffman itu berarti dilakukan sebanyak n kali (Agung, 2013). 2-6