Langkah 10 : panggil fungsi quick sort rekursif dengan parameter indek awal =
j + 1 dan indek akhir = akhir. Langkah 11
: selesai.
2.3 Algoritma Huffman
2.3.1 Pohon Biner Huffman
Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. Sedangkan pohon biner adalah pohon berakar dimana setiap simpul cabangnya
mempunyai paling banyak dua anak. Pohon biner teratur adalah pohon biner dimana setiap simpul cabangnya mempunyai dua buah anak
[4]
.
Gambar 2.2 Pohon biner sempurna dan beberapa contoh pohon biner
Kompresi data pada pengkodean Huffman didasarkan pada frekuensi kemunculan setiap karakternya. Struktur data yang terbentuk pada algoritma
Huffman adalah pohon biner berbobot, dimana skema pengkodeannya dapat dilihat dari flowchart berikut :
Gambar 2.3 Flowchart pembentukan pohon biner Huffman
Dari pohon biner tersebut dapat diperoleh bahwa karakter dengan peluang kemunculan terbesar memiliki jumlah bit yang kecil. Setelah terbentuk pohon
biner tersebut, maka karakter data asli tersebut diganti dengan kode bit berdasarkan pohon biner tadi. Proses ini dinamakan encoding.
Semua data yang di kompresi harus dikembalikan lagi menjadi data semula decoding. Dalam Huffman terdapat 2 cara untuk melakukan decoding
yaitu menggunakan pohon biner atau menggunakan tabel kode. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
2.3.1.1 Menggunakan Pohon Biner Huffman
Langkah-langkah yang dilakukan dalam proses decoding dengan pohon biner Huffman adalah :
a. Baca bit pertama dari string biner masukan
b. Lakukan traversal pada pohon Huffman mulai dari akar sesuai dengan bit
yang dibaca. Jika bit yang dibaca adalah 0, baca anak kiri. Tetapi jika yang dibaca adalah 1, baca anak kanan.
c. Jika anak dari pohon bukan daun, baca bit berikutnya dari string biner.
d. Traversal hingga ditemukan daun.
e. Pada daun tersebut, simbol ditemukan dan proses penguraian kode selesai.
f. Proses penguraian kode dilakukan hingga seluruh string biner masukan
diproses.
2.3.1.2 Menggunakan Tabel Kode Huffman
Kode Huffman itu sendiri disusun menggunakan kode awalan prefiks code yang berarti kode awalan dari sebuah simbolkarakter tidak boleh menjadi
awalan suatu simbol lain. Oleh karena itu rangkaian bit hasil enkripsi dapat dengan mudah diuraikan menjadi data semula. Yang perlu dilakukan hanyalah
melihat rangkaian setiap bit hasil enksripsi di dalam tabel kode Huffman. Kompleksitas dari algoritma Huffman adalah
T = � log .
Dikarenakan dalam sekali proses iterasi, pada saat penggabungan dua buah pohon yang mempunyai frekuensi terkecil pada sebuah akar membutuhkan waktu
� log , dan proses tersebut dilakukan berulang kali sampai hanya tersisa satu buah pohon Huffman, yang berarti dilakukan sebanyak n kali
[5]
.
2.3.2 Huffman Statis
Algoritma Huffman Statis merupakan algoritma dasar dari Huffman Coding. Untuk mendapatkan kode Huffman, mula-mula kita harus menghitung
dahulu peluang kemunculan tiap karakter dalam teks. Pada Huffman Statis pembentukan pohon Huffman adalah sebagai berikut :
1. Pilih dua karakter dengan peluang terkecil. Kedua simbol tadi
dikombinasikan sebagai simpul orangtua sehingga menjadi simbol 2 karakter dengan peluang yang dijumlahkan.
2. Selanjutnya pilih 2 simbol berikutnya termasuk simbol baru yang
mempunyai peluang terkecil. 3.
Prosedur yang sama dilakukan pada dua simbol berikutnya yang mempunyai peluang terkecil
[4]
. Contoh :
Data teks : EBCDAAEA = 8 huruf Membutuhkan memori : 8 x 8 bit = 64 bit 8 byte
Kode ASCII : E = 01000101
B = 01000010 C = 01000011
D = 01000100 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
A = 01000001 A = 01000001
E = 01000101 A = 01000001
Frekuensi kemunculan data string di atas A = 3, E = 2, B=1, C = 1 dan D = 1.
Maka peluang yang didapat : C dan D menjadi 1 CD sehingga probabilitas menjadi 18 + 18 =
28 CD dan B menjadi 1 BCD sehingga probabilitas menjadi 18 + 28
= 38 BCD dan E menjadi 1 EBCD sehingga probabilitas menjadi 28 +
38 = 58 EBCD dan A menjadi 1 AEBCD sehingga probabilitas menjadi 38
+ 58=88 Probabilitas yang lebih besar akan diletakkan di sebelah kiri dan paling
dekat dengan robot. Maka hasil pohon Huffman adalah sebagai berikut : PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
A
E
B
D C
EABCD
ABCD
BCD
CD 1
1
1
1
Gambar 2.4 Hasil dari pohon Huffman
Huruf Kode
A 1
E 01
B 001
C 0000
D 0001
Tabel 2.1 Tabel Kode Huffman
Dengan melakukan pengkodean di atas, maka didapat sebuah kode yang sangat pendek. Sebagai contoh untuk karakter A yang sebelumnya berjumlah 8 bit
hanya menjadi 1 bit. Sehingga kapasitas memori yang diperlukan :
Sebelum : 8 x 8 bit = 64 bit Sesudah : 3 x 1 bit + 2 x 2 bit + 1 x 3 bit + 2 x 4 bit = 3 + 4 + 3 + 8 = 18 bit
2.3.3 Huffman Dinamis
Algoritma Huffman Dinamis atau Adaptive Huffman Coding AHC merupakan suatu lanjutan dari algoritma Huffman Statis di mana AHC merupakan
algoritma yang lebih efisien dan mampat. AHC lebih sering dilakukan pada proses transfer data streaming. Berikut algoritma AHC FGK Faller-Gallager-Knuth
[6]
: 1.
Buat suatu simbol yang bernama NYT Not Yet Transmitted atau berarti belum ditransmisi.
2. Jika simbol adalah NYT, tambahkan 2 anak NYT tersebut, satunya akan
menjadi NYT baru dan yang lainnya adalah untuk simbol, akan menambahkan nilai dari NYT akar dan daun akan terbentuk. Jika daun
baru terbentuk lanjutkan langkah 4, jika telah ada sebelumnya periksa dulu di langkah 3.
3. Jika simbol yang dimasukan terakhir memiliki probabilitas yang lebih
tinggi maka akan ditukar dengan yang sebelumnya menempati tempat kemunculan tertinggi.
4. Tambahkan nilai dari akar tersebut.
5. Jika bukan akar, kembali ke akar inang lalu lanjutkan ke langkah 2, selain
itu selesai. Dari algoritma di atas, maka dapat di masukan ke dalam contoh berikut.
Contoh : PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Gambar 2.5 Proses pembentukan pohon Huffman Dinamis FGK
1. Pohon Huffman kosong dan berisi NYT 256 2 byte.
2. Karakter pertama adalah a, dan disimpan pada anak NYT 256 yang
bobotnya bertambah 1 dan menambah anak NYT 254. Simbol a memiliki bobot 1 dengan alamat 255.
3. Karakter kedua adalah b, dan disimpan pada anak NYT 254. Simbol b
memiliki bobot 1 dengan alamat 253 serta NYT 254 memiliki anak NYT 252.
4. Karakter berikutnya adalah b lagi, maka akan dimasukan ke 253 proses
searching dan bobotnya menjadi 2. Lalu dibandingkan dengan karakter a, karena bobot b lebih besar dari a maka posisi a dan b ditukar.
Dari pohon di atas maka dapat disimpulkan bahwa karakter A memiliki code “01” dan karakter B memiliki code “1”.
Dari contoh Huffman Dinamis FGK di atas, dapat diterapkan pada data yang sama EBCDAAEA yaitu dengan langkah-langkah sebagai berikut :
E
1
B
1
C
1
4
D
1
E
1
B
1
C
1
5
D
1
A
1
A
2
B
1
C
1
6
D
1
E
1
E
1
1
E
1
B
1
2
E
1
B
1
3
C
1
A
2
E
2
C
1
7
D
1
B
1
A
3
E
2
C
1
8
D
1
B
1
Gambar 2.6 Pembentukan pohon Huffman Dinamis
1. Karakter pertama ‘E’ masuk, dan menempati posisi dekat dengan akar.
Bobot atau jumlah ‘E’ adalah 1. 2.
Karakter kedua ‘B’ masuk dan mengecek posisi, karena posisi dekat dengan akar sudah ditempati ‘E’ maka ‘B’ membentuk posisi di bawah
‘E’. Bobot karakter ‘B’ adalah 1. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
3. Karakter ketiga ‘C’ masuk maka akan mengecek dan membuat posisi di
bawah ‘B’. Bobot karakter ‘C’ adalah 1.
4. Karakter k eempat ‘D’ masuk maka akan mengecek dan membuat posisi di
bawah ‘C’. Bobot karakter ‘D’ adalah 1. 5.
Karakter kelima ‘A’ masuk maka akan mengecek dan membuat posisi di bawah ‘D’. Bobot karakter ‘A’ adalah 1.
6. Karakter keenam ‘A’ masuk dan akan mengecek setiap node. Karena
karakter ‘A’ sudah membuat node di posisi paling bawah maka bobot ‘A’ akan bertambah menjadi 2. Perubahan bobot ini akan mengubah posisi ‘A’
menjadi dekat dengan akar dan bertukar posisi denga n karakter ‘E’.
7. Karakter ketujuh ‘E’ masuk dan mengecek setiap node. Karakter ‘E’ juga
telah dibuat maka bobot ‘E’ bertambah menjadi 2. Karakter ‘E’ kembali mengecek dari akar untuk mengubah posisi. Posisi dekat akar telah
ditempati ‘A’ dengan bobot sama, maka ‘E’ mengecek dengan turun satu node
. Karakter ‘B’ dengan bobot 1 ditukar posisinya dengan karakter ‘E’ .
Memang secara posisi pohon antara algoritma Huffman Statis dan Dinamis hampir sama, hanya saja lebih efisien Huffman Dinamis. Hal itu didapat
karena peletakan daun pada Huffman Dinamis yang terus berubah-ubah dynamic dalam menentukan jumlah kemunculan tiap karakter. Dibandingkan dengan
Huffman Statis yang terlebih dahulu harus menghitung peluang kemunculan tiap karakter.
2.4 Dekompresi