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