Algoritma Huffman Studi Perbandingan Algoritma Huffman Dan LZW (Lempel Ziv Welch) Pada Pemampatan File Teks

x 100 2.1 2. Kecepatan proses pemampatan ditulis dalam satuan Kbytes: Kecepatan Proses Pemampatan

2.2

Ada beberapa kriteria yang sering menjadi pertimbangan dalam memilih suatu metode pemampatan yang tepat diantaranya kecepatan pemampatan, sumber daya yang dibutuhkan, kualitas, ukuran file, kompleksitas algoritma dan lain-lain Munir, Rinaldi, 2004, hal: 166. Kualitas pemampatan dengan kebutuhan memori biasanya berbanding terbalik. Kualitas pemampatan yang bagus umumnya dicapai pada proses pemampatan yang menghasilkan pengurangan memori yang tidak begitu besar dan begitu juga sebaliknya.

2.6 Algoritma Huffman

Algoritma Huffman, yang dibuat oleh seorang mahasiswa MIT bernama David Huffman pada tahun 1952, merupakan salah satu metode paling lama dan paling terkenal dalam pemampatan 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. 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 Ida, Mengyi Pu, 2006. Metoda statik adalah metoda yang selalu menggunakan peta kode yang sama, metoda ini membutuhkan dua fase two-pass: fase pertama untuk menghitung probabilitas kemunculan tiap simbol dan menentukan peta kodenya, dan fase kedua untuk mengubah pesan menjadi kumpulan kode yang akan di transmisikan. Sedangkan berdasarkan teknik pengkodean simbol yang digunakan, algoritma Universitas Sumatera Utara Huffman menggunakan metode symbolwise. Metoda 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. Dalam tugas akhir ini algoritma Huffman yang dibahas yaitu algoritma Huffman yang menggunakan metode statik Ida, Mengyi Pu, 2006. 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. 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 Wardoyo, Irwan et al, 2003, hal:1.

2.6.1 Kode Prefix Prefix Code

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 Hanif, Irfan, 2004, hal: 3. Universitas Sumatera Utara

2.6.2 Kode Huffman

Huffman memberikan sebuah algoritma untuk memangun sebuah kode Huffman dengan masukan string teks S={s 1 ,s 2 ,…,s n } dan frekuensi kemunculan karakter F={f 1 ,f 2 ,…,f n }, dihasilkan keluaran berupa kode string biner C={c 1 ,c 2 ,…,c n } atau disebut kode Huffman Liliana et al, 2003, hal:4. Algoritma Pemampatan Huffman: 1. Baca file text yang akan dimampatkan file asal. 2. Hitung frekuensi dari setiap karakter yang ada. Jenis karakter dan frekuensinya disimpan sebagai tree dalam sebuah list. 3. Selama list masih mempunyai node lebih dari satu maka a. Urutkan list berdasarkan frekuensinya, secara ascending. b. Buat tree baru, kaki kiri diisi dengan node pertama list dan kaki kanannya diisi dengan node kedua list. Karakter yang disimpan berupa “a“ dan frekuensinya merupakan jumlahan dari frekuensi kedua kakinya. 4. Sebelum hasil pemampatan disimpan dalam file hasil, maka simpan terlebih dahulu tree huffman nya. Pertama simpan jumlah karakter keseluruhan. Kemudian telusuri tree secara preorder, kaki kiri diberi kode “0“ dan kaki kanan diberi kode “1“. Setelah sampai pada leaf maka simpan karakter pada leaf tersebut baru kemudian simpan deretan kode yang dihasilkan. Setiap kode disimpan dengan dibatasi “a“. Setelah tree selesai disimpan, untuk membatasi penyimpanan tree dengan hasil kompresi, disisipkan “A“. 5. Telusuri tree secara preorder, kaki kiri diberi kode “0“ dan kaki kanan diberi kode “1“. Setelah sampai pada leaf maka deretan kode yang didapat digunakan untuk mengkodekan karakter pada leaf tersebut. Setelah penelusuran selesai maka akan didapat daftar karakter dan kode binernya. 6. Baca setiap karakter pada file asal. Ubah menjadi kode biner. Setelah semua dikodekan, setiap 8 kode dicari desimalnya ASCII kemudian simpan kembali sebagai karakter baru. Universitas Sumatera Utara Tabel karakter-karakter yang diurutkan berdasarkan frekuensi kemunculan karakter tersebut berhubungan dengan distribusi probabilitas atau distribusi peluang. Distribusi probabilitas ini berhubungan pada kemungkinan penempatan akar atau subpohon baru yang telah terbentuk. Probabilitas untuk masing-masing karakter adalah frekuensi karakter tersebut dibagi jumlah frekuensi keseluruhan. Untuk proses penirmampatan decompression merupakan kebalikan dari proses pemampatan compression, Decompression berarti menyusun kembali data dari string biner menjadi sebuah karakter kembali. Decompression dapat dilakukan dengan dua cara, yang pertama dengan menggunakan tabel dan yang kedua dengan menggunakan algoritma penirmampatan decompression. Algoritma penirmampatan 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. Contoh 2.1 Diberikan string “piagam penghargaan” sebagai masukan pada pemampatan file teks. Masukan ini terdiri dari karakter-karakter abjad S={p, i, a, g, m, e, n, h, r, spasi} dengan frekuensi kemunculan karakter F={2, 1, 5, 3, 1, 1, 2, 1, 1, 1}. Apabila string tersebut menggunakan koe ASCII untuk mengkodekan setiap karakter, maka representasi 18 karakter membutuhkan 18 x 8 = 144 bit atau 18 bytes. Untuk meminimumkan jumlah bit yang dibutuhkan, panjang kode untuk setiap karakter sedapat mungkin diperpendek, terutama untuk setiap karakter yang frekuensi kemunculannya besar. Jadi, bagaimana memperoleh jumlah minimum bit apabila digunakan algoritma Huffman untuk menghasilkan kode yang merepresentasikan setiap karakter. Universitas Sumatera Utara Dengan menggunakan algoritma Huffman untuk mengkodekan setiap karakter dapat diperoleh kode Huffman sebagai berikut : Masukan : 18 karakter yang telah diurutkan dan table frekuensi Keluaran : Kode Huffman 1. Pengurutan karakter berdasarkan frekuensi kemunculannya. Karakter pada data diurutkan di dalam tabel secara menaik ascending order. Tabel 2.1 Frekuensi Kemunculan Karakter yang Telah Diurutkan Karakter Frekuensi spasi 1 r 1 h 1 e 1 m 1 i 1 p 2 n 2 g 3 a 5 Jumlah 18 2. Pembentukan pohon Huffman Setiap karakter digambarkan sebagai daun. Gabungkan dua daun yang mempunyai frekuensi kemunculan karakter paling kecil untuk membentuk sebuah akar kemudian akar diurutkan kembali. Akar merupakan jumlah frekuensi dua daun atau subpohon penyusunnya. Iterasi ini dilakukan hingga terbentuk satu buah pohon biner. Beri label 0 dan 1 pada setiap sisi pohon biner. Sisi kiri diberi label 0 dan sisi kanan diberi label 1. Universitas Sumatera Utara Pengurutan kembali akar yang baru terbentuk berhubungan dengan distribusi probabilitas. Pada contoh ini, ada lebih dari satu kemungkinan tempat yang tersedia pada penggabungan karakter “spasi” dan “r” dengan frekuensi 2. Untuk mencegah penggabungan akar baru terlalu cepat maka akar ditempatkan pada posisi terendah. Jadi, akar baru “spasi” dan “r” ditempatkan sesudah karakter “a”. Pembentukan pohon biner dari string “piagam penghargaan” adalah : h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 7.

2 2

4 8 4 8 h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 1. h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 2. 2 h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 3.

2 2

h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 4.

2 2

4 h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 5.

2 2

4 8 h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 6.

2 2

4 8 4 Universitas Sumatera Utara h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 8.

2 2

4 8 4 8 16 h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 9.

2 2

4 8 4 8 16 18 h=1 e=1 m=1 i=1 p=2 n=2 g=3 a=5 2 spasi=1 r=1 2 2 4 8 4 8 16 18 1 1 1 1 1 1 1 1 1 Gambar 2.3 Pembentukan Pohon Huffman Keterangan gambar : : akar yang dibentuk dari dua daun atau subpohon penyusunnya : daun yang terdiri dari karakter dan frekuensinya Universitas Sumatera Utara 3. Kode Huffman yang diperoleh dari pohon Huffman yang telah terbentuk adalah : Tabel 2.2 Tabel Kode Huffman untuk Masing-Masing Karakter Karakter Frekuensi f Kode Huffman Panjang Kode s hf Total Panjang f x s hf Spasi 1 10110 5 5 r 1 10111 5 5 h 1 10100 5 5 e 1 10101 5 5 m 1 00 2 2 i 1 01

2 2

p 2 1000 4 8 n 2 1001 4 8 g 3 110 3 9 a 5 111 3 15 Total 18 34 64 Dengan demikian, jumlah bilangan bit yang dibutuhkan oleh algoritma Huffman untuk merepresentasikan string “piagam penghargaan” adalah 64 bit. String tersebut dimampatkan dengan rasio sebesar : x 100 x 100 = 44,4 Dengan demikian string “piagam penghargaan” dimampatkan menjadi rangkaian bit : 1000011111101110010110100010101100111010100111101111101111111001 Untuk proses penirmampatan decompression atau menyusun kembali data dari kode biner menjadi sebuah string asli dapat digunakan tabel kode Huffman yang Universitas Sumatera Utara telah terbentuk atau menggunakan algoritma penirmampatan. Pada proses penirmampatan, rangkaian bit biner 1000011111101110010110100010101100111010100111101111101111111001 Dimulai dengan membaca bit pertama yaitu “1”, tidak terdapat bit “1” pada tabel kode Huffman. Lalu baca bit berikutnya, sehingga menjadi “10”, tidak terdapat juga bit “10”, kemudian baca lagi bit berikutnya, sehingga menjadi “100”, tidak terdapat juga bit “100”, kemudian baca lagi bit berikutnya, sehingga menjadi “1000”. Rangkaian bit “1000” ini ditemukan pada tabel kode Huffman yaitu bit yang merepresentasikan karakter “p”. Proses ini terus dilakukan hingga tidak terdapat lagi bit biner.

2.7 Algoritma LZW Lempel Ziv Welch