Algoritma Huffman LANDASAN TEORI

Bob menghitung a = g k mod p = 2 1520 mod 2357 = 1430 b = y k m mod p= 1185 1520 2035 mod 2357 = 697 Jadi, cipherteks yang dihasilkan adalah 1430, 697. Bob mengirim cipherteks ini ke Alice, oleh alice 1a x = a x – 1 = a p – 1 – x mod p = 1430 605 mod 2357 = 872 m = ba x p = 697 872 mod 2357 = 2035

2.3. Algoritma Huffman

Algoritma Huffman adalah salah satu algoritma kompresi. Algoritma huffman merupakan algoritma yang paling terkenal untuk mengompres teks. Terdapat tiga fase dalam menggunakan algoritma Huffman untuk mengompres sebuah teks, pertama adalah fase pembentukan pohon Huffman, kedua fase encoding dan ketiga fase decoding. Pengkodean Huffman adalah teknik untuk mengompresi data. Algoritma greedy Huffman melihat terjadinya masing-masing karakter dan sebagai string biner secara optimal Huffman coding adalah bentuk coding statistik yang mencoba untuk mengurangi jumlah bit yang diperlukan untuk merepresentasikan string dari simbol [Mathur, M. K., Loonker, S. Saxena, D. 2012]. 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. Algoritma Huffman, yang dibuat oleh seorang mahasiswa MIT bernama David Huffman pada tahun 1952, merupakan salah satu metode paling lama dan paling terkenal dalam kompresi teks. Algoritma Huffman menggunakan prinsip pengkodean yang mirip dengan kode Morse, yaitu tiap karakter simbol dikodekan hanya dengan rangkaian beberapa bit, dimana karakter yang sering muncul dikodekan dengan rangkaian bit yang pendek dan karakter yang jarang muncul dikodekan dengan rangkaian bit yang lebih panjang [Mathur, M. K., Loonker, S. Saxena, D. 2012]. Berdasarkan tipe peta kode yang digunakan untuk mengubah pesan awal isi data yang diinputkan menjadi sekumpulan codeword, algoritma Huffman termasuk kedalam kelas algoritma yang menggunakan metode statik. Metode statik adalah metode yang selalu menggunakan peta kode yang sama, metode ini membutuhkan dua fase two-pass: fase pertama untuk menghitung probabilitas kemunculan tiap simbol dan menentukan peta- Universitas Sumatera Utara kodenya, dan fase kedua untuk mengubah pesan menjadi kumpulan kode yang akan ditransmisikan. Sedangkan berdasarkan teknik pengkodean simbol yang digunakan, algoritma Huffman menggunakan metode symbolwise. Metode symbolwise adalah metode yang menghitung peluang kemunculan dari setiap simbol dalam satu waktu, dimana simbol yang lebih sering muncul diberi kode lebih pendek dibandingkan simbol yang jarang muncul. Metode Huffman Dinamis merupakan kelanjutan dari metode Huffman statis dengan menambah atau mengurangi suatu proses tertentu pada metode Huffman statis. Ide dasar dari metode ini adalah meringkas tahapan metode Huffman tanpa perlu menghitung jumlah karakter keseluruhan dalam membangun pohon biner. Metode Huffman dinamis adalah suatu metode dengan kemungkinan kemunculan dari setiap simbol tidak dapat ditentukan dengan pasti selama pengkodean. Hal ini disebabkan oleh perubahan pengkodean secara dinamis berdasarkan frekuensi dari simbol yang telah diolah sebelumnya. Metode ini dikembangkan oleh trio Faller, Gallager dan Knuth, kemudian dikembangkan lebih lanjut oleh Vitter [Merdiyan, Meckah dan Wawan Indarto, 2007]. 2.3.1. Kompresi Data Kompresi data dalam bidang ilmu komputer, ilmu pengetahuan dan seni adalah sebuah penyajian informasi kedalam bentuk yang lebih sederhana [Arizka, R. U. 2011]. Kompresi data dapat diartikan juga sebagai proses yang dapat mengubah sebuah aliran data masukan sumber atau data asli kedalam aliran data yang lain keluaran atau data yang dikompresi yang memiliki ukuran yang lebih kecil. Metode kompresi data dapat dikelompokkan dalam dua kelompok besar yaitu metode lossless dan metode lossy yaitu: 1. Metode lossless Pada teknik ini tidak ada kehilangan informasi. Jika data dikompresi secara lossless, data asli dapat direkonstruksi kembali sama persis dari data yang telah dikompresikan, dengan kata lain data asli tetap sama sebelum dan sesudah kompresi. Secara umum teknik lossless digunakan untuk penerapan yang tidak bisa mentoleransi setiap perbedaan antara data asli dan data yang telah direkonstruksi. Data berbentuk tulisan misalnya file teks, harus dikompres menggunakan teknik lossless, karena kehilangan sebuah karakter saja dapat mengakibatkan kesalahpahaman. Lossless compression disebut juga dengan reversible compression karena data asli bisa dikembalikan dengan sempurna, akan tetapi rasio kompresinya rendah, misalnya pada data teks, gambar seperti GIF dan PNG, contoh Universitas Sumatera Utara -metode ini adalah Shannon-Fano Coding, Huffman Coding, Arithmetic Coding, Run Length Encoding dan lain sebagainya [Arizka, R. U. 2011]. 2. Metode lossy Pada teknik ini akan terjadi kehilangan sebagian informasi. Data yang telah dimanfaatkan dengan teknik ini secara umum tidak bisa direkonstruksi sama persis dari data aslinya. Di dalam banyak penerapan, rekonstruksi yang tepat bukan suatu masalah. Sebagai contoh, ketika sebuah sample suara ditransmisikan, nilai eksak dari setiap sample suara belum tentu diperlukan, tergantung pada yang memerlukan kualitas suara yang direkonstruksi, sehingga banyaknya jumlah informasi yang hilang di sekitar nilai dari setiap sample dapat ditoleransi. Biasanya teknik ini membuang bagian-bagian data yang sebenarnya tidak begitu berguna, tidak begitu dirasakan, tidak begitu dilihat sehingga manusia masih beranggapan bahwa data tersebut masih bisa digunakan walaupun sudah dikompresi, misalnya pada gambar dan MP3, contoh metode ini adalah Transform Coding, Wavelet, dan lain-lain. Lossy compression disebut juga irreversible compression karena data asli mustahil untuk dikembalikan seperti semula. Kelebihan teknik ini adalah rasio kompresi yang tinggi dibanding metode lossless. Keuntungan dari metode lossy atas lossless adalah dalam beberapa kasus metode lossy menghasilkan file kompresi yang lebih kecil dibandingkan dengan metode lossless. Metode lossy sering digunakan untuk mengkompresi suara, gambar dan video karena data tersebut dimaksudkan kepada human interpretation dimana pikiran dapat dengan mudah “mengisi bagian- bagian yang kosong” atau melihat kesalahan yang sangat kecil atau inkonsistensi. Sedangkan lossless digunakan untuk mengkompresi data untuk diterima ditujuan dalam kondisi asli seperti dokumen teks. Lossy akan mengalami generation loss pada data sedangkan pada lossless tidak terjadi karena data yang hasil dekompresi sama dengan data asli. 2.3.2. Dekompresi Sebuah data yang sudah dikompresi dengan teknik lossless harus dapat dikembalikan lagi kebentuk aslinya, prinsip ini dinamakan dekompresi. Untuk dapat merubah data yang terkompres diperlukan cara yang berbeda seperti pada waktu proses kompresi dilaksanakan. Jadi pada saat dekompresi catatan header yang berupa byte-byte tersebut terdapat catatan isi mengenai file tersebut. Catatan header akan menuliskan kembali mengenai isi dari file Universitas Sumatera Utara tersebut, jadi isi dari file sudah tertulis oleh catatan header sehingga hanya tinggal menuliskan kembali pada saat proses dekompresi. Secara umum proses kompresi dan dekompresi lossless dapat dilihat pada gambar 2.1. Kompresi Dekompresi Gambar 2.1 Alur Teknik lossless Kompresi-Dekompresi Data 2.3.3. 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. 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 di-assign dengan frekuensi kemunculan karakter tersebut. 2. Terapkan strategi algoritma greedy sebagai berikut: gabungkan 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 yang ada selalu terurut menaik berdasarkan frekuensi. Sebagai contoh, dalam kode ASCII string 7 huruf “ABACCDA” membutuhkan representasi 7 × 8 bit = 56 bit 7 byte, dengan rincian sebagai berikut: Data Asli .txt, .doc Data Hasil KompresiHuffman Universitas Sumatera Utara A = 01000001 B = 01000010 A = 01000001 C = 01000011 C = 01000011 D = 01000100 A = 01000001 Pada string di atas, frekuensi kemunculan A = 3, B = 1, C = 2, dan D = 1, Gambar 2.2 Pohon Huffm an untuk Karakter “ABACCDA” 2.3.4. 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. Langkah-langkah untuk mengencoding suatu string biner adalah sebagai berikut: 1. Tentukan karakter yang akan di-encoding Universitas Sumatera Utara 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 kita dapat melihat tabel dibawah ini, yang merupakan hasil encoding untuk pohon Huffman pada tabel 2.1. Tabel 2.1 Kode Huffman un tuk Karakter “ABCD” Karakter String Biner Huffman A B 110 C 10 D 111 2.3.5. Proses Decoding 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 dengan menggunakan tabel kode Huffman. 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 traversal pada cabang yang bersesuaian. 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 ”111” Universitas Sumatera Utara Gambar 2.3 Proses Decoding dengan Menggunakan Pohon Huffman Setelah kita telusuri dari akar, maka kita akan menemukan bahwa string yang mempunyai ko de Huffman “111” adalah karakter D. Cara yang kedua adalah dengan menggunakan tabel kode Huffman. Sebagai contoh kita akan menggunakan kode Huffman pada Tabel 1 untuk merepresentasikan string “ABACCDA”. Dengan menggunakan Tabel 1 string tersebut akan direpresentasikan menjadi rangkaian bit: 0 110 0 10 10 1110. Jadi, jumlah bit yang dibutuhkan hanya 13 bit. Dari Tabel 1 tampak bahwa kode untuk sebuah simbolkarakter tidak boleh menjadi awalan dari kode simbol yang lain guna menghindari keraguan ambiguitas dalam proses dekompresi atau decoding, karena 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”, dapat langsung disimpulkan bahwa kode bit “0” merupakan pemetaan dari simbol “A”. Kemudian baca kode bit selanjutnya, yaitu bit “1”. Tidak ada kode Huffman “1”, lalu baca kode bit selanjutnya, sehingga menjadi “11”. Tidak ada juga kode Huffman “11”, lalu baca lagi kode bit berikutnya, sehingga menjadi “110”. Rangkaian kode bit “110” adalah pemetaan dari simbol “B”. 2.3.6. 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. Universitas Sumatera Utara

BAB 3 ANALISIS DAN PERANCANGAN