3.4 Optimalisasi Algoritma Huffman
Seperti yang telah disebutkan dari awal, bahwa algoritma Huffman merupakan dasar dari algoritma kompresi yang ada pada saat ini. Melihat posisi
tersebut bukan tidak mungkin dilakukan suatu modifikasi untuk mengoptimalkan hasil kompresi dari algoritma Huffman. Algoritma Huffman mempunyai dua
macam algoritma, yaitu Huffman Dinamis dan Huffman Statis. Kedua algoritma tersebut mempunyai persamaan yaitu terbuat dari pohon
biner yang dikenal dengan pohon biner Huffman, hanya saja kedua algoritma tersebut mempunyai perbedaan pada preprocessing data. Algoritma Huffman
Dinamis lebih fleksibel dan tanpa preprocessing karena data yang masuk akan diolah penempatannya ketika berada di pohon biner, sedangkan algoritma
Huffman Statis melakukan pengurutan frekuensi kemunculan dahulu sebelum membuat pohon biner. Kedua algoritma mempunyai persamaan menempatkan
karakter yang sering muncul berada di dekat akar sehingga mempunyai kode terpendek.
Pada penelitian ini mencoba untuk memodifikasi algoritma Huffman supaya lebih optimal dalam mendapatkan hasil ukuran kompresi. Secara garis
besar, modifikasi ini merupakan turunan dari algoritma Huffman Statis. Untuk lebih memahaminya, maka sebuah contoh akan penulis berikan.
Data : E B C D A A E A Langkah 1
: cek frekuensi kemunculan setiap huruf, dan di dapat : Hasil : E = 2, B = 1, C = 1, D = 1, A = 3
Langkah 2 : urutkan data dari frekuensi kemunculan terbanyak hingga
sedikit : Hasil : A = 3, E = 2, B = 1, C = 1, D = 1
Langkah 3 : pembentukan pohon biner berdasarkan letak setiap
karakter, jika pada posisi ganjil maka akan menuju ke sebelah kanan pohon. Jika terletak pada posisi genap maka
akan menuju ke sebelah kiri pohon. Secara umum dapat dinyatakan dengan pseudecode sebagai berikut :
1. Cek frekuensi kemunculan tiap karakter.
2. Urutkan frekuensi dari yang terbanyak muncul hingga paling
sedikit muncul. 3.
Cek posisi karakter yang telah diurutkan, variabel cursor == akar : Ganjil :
Jika cursor.getKanan == null, buat node baru.
Jika cursor.getKanan = null, maka cursor = cursor.getKanan .
Genap :
Jika cursor.getKiri == null, buat node baru.
Jika cursor.getKiri == null, maka cursor = cursor.getKiri . 4.
Lakukan nomor 3 hingga semua karakter ditempatkan pada pohon biner.
Langkah 4 : membuat pohon biner dari data yang telah diurutkan.
Gambar 3.4 Pembentukan pohon Huffman modifikasi
1.
Pada awalnya hanya akar dan data belum masuk.
2.
Kemudian masuk karakter A, karena posisinya di awal ganjil dan data belum ada maka langsung membuat node A di sebelah kanan akar.
3.
Kemudian masuk karakter E, karena posisinya kedua genap dan data belum ada maka langsung membuat node E di sebelah kiri akar.
4.
Masuk karakter B yang berada pada urutan ketiga ganjil, tetapi sudah ada data A di sebelah kanan maka cursor turun 1 langkah dan membuat
node B di bawah node A.
5.
Karakter C lalu masuk sebagai urutan keempat genap, tetapi sudah ada data E di sebelah kiri maka cursor turun 1 langkah dan membuat node
C di bawah node E. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
6.
Karakter terakhir adalah D dengan posisi kelima ganjil. Karakter tersebut menempati di sebelah kanan akar, tetapi sudah ada data A dan B maka
currsor turun 2 langkah dan membuat node D.
3.5 Desain User Interface