Algoritma Huffman Perbandingan Macam-macam Tipe Algoritma Kompresi Teks

terhadap perubahan karakteristik isi file selama proses kompresi berlangsung. Contoh: Algoritma LZW dan RLE. Berdasarkan teknik pengkodeanpengubahan pesan awal atau simbol menjadi sekumpulan codeword, metode kompresi teks dapat dibagi menjadi dua kategori, yaitu: a. Metode Symbolwise : menghitung peluang kemunculan dari tiap simbol dalam pesan masukkan, lalu mengkodekan satu simbol dalam satu waktu, di mana simbol yang lebih sering muncul diberi kode lebih pendek dibandingkan simbol yang lebih jarang muncul. Contoh: Algoritma huffman. b. Metode Dictionary : menggantikan karakterfragmen dalam pesan masukkan dengan indeks lokasi dari karakterfragmen tersebut dalam sebuah kamus. Contoh: Algoritma LZW dan RLE.

2.2.1. Algoritma Huffman

Algoritma Huffman, yang dibuat oleh Mahasiswa MIT bernama David Huffman pada tahun 1952, merupakan salah satu metode paling lama dan paling terkenal dalam kompresi teks. Algortima huffman menggunakan prinsip pengkodean yang mirip dengan kode morse, yaitu tiap karakter dikodekan hanya dengan rangkaian beberapa bit, di mana karakter yang sering muncul dikodekan dengan rangkaian bit yang pendek dan karakter yang jarang muncul dikodekan dengan serangkaian bit yang lebih panjang. Kode Huffman pada dasarnya merupakan kode prefik. Kode prefik adalah himpunan yang berisi sekumpulan kode biner, di mana pada kode prefik ini tidak ada kode biner yang menjadi awal bagi kode biner yang lain. Kode prefik biasanya direpresentasikan sebagai pohon biner yang diberikan nilai atau label. Untuk cabang kiri pada pohon biner diberi label 0, sedangkan pada cabang kanan pohon biner diberi label 1. Rangkaian bit yang terbentuk pada setiap lintasan dari akar ke daun merupakan kode prefik untuk karakter yang berpadanan. Pohon biner ini biasa disebut pohon huffman. 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 bersimpul tunggal. Setiap simpul ditandai dengan frekuensi kemunculan karakter tersebut. 2. Gabungkan dua buah pohon huffman yang mempunyai frekuensi terkecil pada sebuah akar. Setelah digabungkan akar tersebut akan mempunyai frekuensi yang merupakan jumlah dari frekuensi dari dua buah pohon penyusunnya. 3. Ulangi langkah ke dua sampai hanya tersisa satu buah pohon huffman, agar pemilihan dua buah pohon yang akan digabungkan berlangsung cepat, maka semua yang ada selalu terurut menaik berdasarkan frekuensi. Sebagai contoh, dalam kode ASCII string 7 huruf “ABACCDA” membutuhkan representasi 7 x 8 bit = 56 bit 7 byte. Dengan rincian sebagai berikut: A = 01000001 C = 01000011 B = 01000010 D = 01000100 A = 01000001 A = 01000001 C = 01000011 Pada string di atas, frekuensi kemunculan A = 3, B = 1, C = 2, dan D =1 Gambar 2.3. Pohon Huffman untuk karakter “ABACCDA” Encoding adalah cara menyusun string biner dari teks yang ada. Proses encoding untuk satu karakter dimulai dengan membentuk satu buah 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. Langkah-langkah 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 di mana karakter itu berada. 3. Ulangi langkah ke dua sampai seluruh karakter di-encoding. Sebagai contoh dapat dilihat tabel di bawah ini, yang merupakan hasil encoding untuk pohon huffman pada gambar 2.3. Tabel 2.2. Kode Huffman untuk karakter “ABCD” Decoding merupakan kebalikan dari encoding. Decoding berarti menyusun kembali data dari string biner menjadi sebuah karakter kembali. Decoding dapat dilakukan dengan dua cara, yang pertama dengan menggunakan pohon huffman dan yang kedua menggunakan tabel kode huffman. Langkah-langkah men-decoding suatu string biner dengan menggunakan pohon huffman adalah: 1. Baca sebuah bit dari string biner mulai dari akar 2. Untuk setiap bit pada langkah satu, lakukan tranveral pada cabang yang bersesuaian. 3. lakukan langkah 1 dan 2 sampai bertemu daun. Kodekan rangakaian bit yang telah di baca dengan karakter di daun. 4. Ulangi dari langkah 1 sampai semua bit di dalam string habis. Sebagai contoh, bagaimana men-decoding string biner yang bernilai “111” Setelah ditelusuri dari akar, maka akan ditemukan bahwa string yang mempunyai kode huffman “111” adalah karakter D. Gambar 2.4. Proses Decoding dengan menggunakan pohon huffman Cara yang kedua adalah menggunakan tabel kode huffman, sebagai contoh digunakan kode huffman pada tabel 2.2 untuk merepresentasikan string “ABACCDA”. Dengan menggunakan tabel 2.2 tersebut akan direpresentasikan menjadi rangkaian bit : 0 110 0 10 10 1110. Jadi jumlah yang dibutuhkan hanya 13 bit. Dari Tabel 2.2 tampak bahwa kode untuk sebuah simbolkarakter tidak boleh menjadi awalan dari kode simbol yang lain guna menghindari ambiguitas dalam proses dekompresi atau decoding. Karena tiap-tiap kode huffman yang dihasilkan unik, maka proses decoding dapat dilakukan dengan mudah. Contoh: saat membaca kode bit pertama dalam rangkaian bit “011001010110”, yaitu bit ”0” merupakan pemetaan dari simbol “A”. Kemudian dibaca kode bit selanjutnya, sehingga menjadi “11”. Tidak ada juga kode huffman “11” lalu baca lagi kode bit berikutnya, sehingga menjadi “110” adalah pemetaan dari simbol “B”.

2.2.2. Algorima Run-Length-Encoding RLE