PENGKODEAN DAN KOMPRESI DATA (CEH4A3)
Huffman Coding
Huffman Coding Dikembangkan oleh David Huffman ketika kuliah Dikembangkan sebagai bagian dari tugas kuliahnya (class- assignment) Ciri utama: Karakter yang sering muncul akan mendapat representasi bit pendek Karakter yang jarang muncul akan mendapat representasi bit panjang Untuk sebuah pesan tertentu, dapat dihasilkan beberapa kode Huffman yang berbeda, tergantung aturan yang digunakan pada algoritmanya. Aturan tersebut bersifat optional namun harus konsisten.
Algoritma Dasar Huffman Coding Urutkan symbol berdasarkan probabilitasnya Jika probabilitas sama, urutkan symbol/karakter berdasarkan indeks symbol. Ambil dua symbol dengan probabilitas terkecil, gabungkan menjadi symbol baru, dan jumlahkan probabilitasnya Urutkan kembali symbol-symbol seperti langkah 1 dengan menyertakan symbol baru yang diperoleh di langkah 2 Simbol baru ditempatkan di bawah simbol lama jika probabilitasnya sama Ulangi langkah 2 dan 3 berulang-ulang hingga diperoleh jumlah probabilitas = 1 Tentukan codewords setiap symbol dengan penelusuran bit
Representasi Huffman Coding Dapat menggunakan skema panah, atau pohon biner Probabilitas dapat diurut naik (ascending) atau pun menurun (descending), yang penting konsisten pada saat melakukan coding Indeks huruf juga dapat diurut menaik atau menurun, yang penting konsisten pada saat melakukan coding Constraint pada Kode Huffman adalah panjang codeword (banyaknya bit/codeword), bukan nilai bit nya Sangat mungkin diperoleh representasi kode Huffman yang berbeda jika kesepakatan pada algoritma diubah (asal konsisten)
Contoh Rancanglah sebuah kode Huffman untuk A = {a1, a2, a3, a4, a5}, dengan P(a1) = P(a3) = 0.2, P(a2) = 0.4, P(a4) = P(a5) = 0.1. Entropi? Average Length? Redundancy? Efisiensi? Rasio kompresi?
Jawaban Kode Huffman yang diperoleh = {111, 0, 10, 1100, 1101} Entropi = 2,122 bits/simbol Average Length = 2.2 bits/simbol Redundancy = 2.2 – 2.122 bit/simbol = 0.078 bits/simbol Efisiensi = (Entropi/Average Length)x100% = 96.45% Rasio Kompresi = 𝑏𝑖𝑡 𝑑𝑎𝑡𝑎 𝑡𝑒𝑟𝑒𝑑𝑢𝑘𝑠𝑖 𝑏𝑖𝑡 𝑑𝑎𝑡𝑎 𝑠𝑒𝑏𝑒𝑙𝑢𝑚 𝑘𝑜𝑚𝑝𝑟𝑒𝑠𝑖 𝑥100% Data tereduksi = data sebelum kompresi – data hasil kompresi Misal jumlah simbol yang muncul adalah 10 simbol: Jumlah bit data hasil kompresi = 22 bits; Jumlah bit data sebelum kompresi = 80 bits; Rasio kompresi = 72.5%
Minimum Variance Huffman Coding Kode Huffman dengan variansi panjang codewords minimum Average length pada kode Huffman versi minimum variance = average length kode Huffman biasa Kelebihannya adalah variansi panjang codeword minimum sehingga lebih optimal di dalam proses transmisi data
Algoritma Minimum Variance Huffman Coding Urutkan symbol berdasarkan probabilitasnya Jika probabilitas sama, urutkan symbol/karakter berdasarkan indeks symbol. Ambil dua symbol dengan probabilitas terkecil, gabungkan menjadi symbol baru, dan jumlahkan probabilitasnya Urutkan kembali symbol-symbol seperti langkah 1 dengan menyertakan symbol baru yang diperoleh di langkah 2 Simbol baru ditempatkan di atas simbol lama jika probabilitasnya sama Ulangi langkah 2 dan 3 berulang-ulang hingga diperoleh jumlah probabilitas = 1 Tentukan codewords setiap symbol dengan penelusuran bit
Contoh Rancanglah sebuah kode Huffman untuk A = {a1, a2, a3, a4, a5}, dengan P(a1) = P(a3) = 0.2, P(a2) = 0.4, P(a4) = P(a5) = 0.1. Entropi? Average Length? Redundancy?
Jawaban Kode Huffman yang diperoleh = {00, 11, 01, 100, 101} Entropi = 2,122 bits/simbol Average Length = 2.2 bits/simbol Redundancy = 2.2 – 2.122 bit/simbol = 0.078 bits/simbol
Extended Huffman Code Jika probabilitas kemunculan antara simbol yang berbeda sangat timpang, nilai probabilitas maksimum (pmax) bisa sangat besar dan kode huffman yang dihasilkan menjadi tidak efisien Alternatif solusi: menggunakan Extended Huffman Coding Sebuah codeword tidak merepresentasikan satu simbol, melainkan sekumpulan simbol (lebih dari 1) atau block of symbols Bertujuan untuk mendapatkan nilai average length yang mendekati entropi
Contoh Diketahui A = {a1, a2, a3}, dengan P(a1) = 0.8, P(a2) = 0.02, P(a3) = 0.18. Entropi source = 0.816 bits/symbol Huffman code yang dihasilkan: Average length = 1.2 bits/symbol Redundancy = 0.384 bits/symbol (47% dari entropi) Simbol Kode Huffman a1 1 a2 00 a3 01
Jawaban Average Length = 0.8614 bits/symbol Simbol Probabilitas Kode Huffman a1a1 0.64 1 a1a2 0.016 010111 a1a3 0.144 011 a2a1 01010 a2a2 0.0004 01011010 a2a3 0.0036 01011011 a3a1 00 a3a2 0101100 a3a3 0.0324 0100 A = {a1, a2, a3}, dengan P(a1) = 0.8, P(a2) = 0.02, P(a3) = 0.18. Dapat dibuat codeword yang merepresentasikan rangkaian 2 simbol Karena banyaknya simbol pada source = 3, maka akan diperoleh 32 = 9 simbol baru yang akan dicari codewordsnya Average Length = 0.8614 bits/symbol Redundancy = 0.0454 bits/symbol (5.5% dari entropi)
LATIHAN Diketahui A = {a1, a2, a3, a4, a5}, dengan P(a1) = 0.15, P(a2) = 0.04, P(a3) = 0.26, P(a4) = 0.05, dan P(a5) = 0.5 Cari Kode Huffman Hitung entropi source, average length dan redundancy-nya Diketahui A = {a1, a2, a3, a4}, dengan P(a1) = 0.1, P(a2) = 0.3, P(a3) = 0.25, P(a4) = 0.35. Cari Minimum Variance Huffman Coding nya Terdapat string “rumah makan murah meriah” (10 huruf termasuk spasi, asumsi indeks spasi lebih dulu dari huruf ‘a’) Cari kode Huffman nya Hitung average length dan redundancy nya