Anda di halaman 1dari 31

Addaptive Huffman Code

(Algoritma FGK dan Vitter)


Ali Muhammad
Adaptive Huffman Coding

• Faller 1973 dan Gallager 1978


• Knuth 1985  FGK
• Vitter 1987  Algoritma Vitter
• Menggunakan metode 1 pass
• Jumlah bit yang ditansmisikan lebih besar
• Tidak bertentangan dengan optimalitas dari metode statis
• Kinerja Buruk terjadi pada batas atas pada redundansi
Algoritma FGK

• Sibling properti
• Setiap node kandung (kecuali akar) memiliki sibling
• Node terdaftar jika memiliki urutan non-increasing bobot dengan
setiap node yang berdekatan dengan siblingnya
• Daunnya mewakili Pesan sumber
• Bobot daunnya merupakan frekuensi pesannya
Prosedur (Contoh Pesan : aa bbb cc)

• Total Node = 2*n-1 = (2.4)-1 = 7


• Pesan pertama yang ditransmisikan = a
• Sebelum pohon mulai dibangun, kita mengirim kode biner 00 untuk
a dan menambah-kan a kedalam tree
• Node NYT akan melahirkan node NYT baru dan node terminal
disesuaikan pesan
• Berat node terminal akan lebih tinggi dari node NYT, jadi kami
menetapkan nomor 58 ke node NYT dan 59 ke node terminal "a"
• Simbol selanjutnya adalah a dan kode yang dikirimkan adalah 1
• Ditetapkan kode pada setiap simbol sebagai berikut :
A = 00 B = 01 C = 10 Spasi = 11
Langkah Kerja

Input : a
1
Output : 1
Simbol : NYT a b c spasi
Kode : 0 1
0 1

NYT a
Input : aa
2
Output : 11
Simbol : NYT a b c spasi
Kode : 0 1
0 2

NYT a
Input : aa_
Output : 1101
Simbol : NYT a b c spasi
Kode : 00 1 01
Input : aa_b
Output : 1101001
Simbol : NYT a b c spasi
Kode : 000 1 001 011
Input : aa_bb
Output : 0010111111
Simbol : NYT a b c spasi
Kode : 110 0 111 10
Input : aa_bbb
Output : 0010111111111
Simbol : NYT a b c spasi
Kode : 110 0 111 10
Input : aa_bbb_
Output : 001011111110
Simbol : NYT A b c spasi
Kode : 110 0 111 10
Input : aa_bbb_c
Output : 0010111111101101
Simbol : NYT A b c spasi
Kode : 1100 0 111 1101 10
Input : aa_bbb_cc
Output : 00101111111011011101
Simbol : NYT A b c spasi
Kode : 1100 0 111 1101 10
Algoritma Vitter

• Menggabungkan dua perbaikan atas algoritma FGK


• Jumlah simpang susun node bergerak di pohon selama
recomputation dibatasi satu
• Meminimalkan nilai-nilai SUM {l (i)} dan MAX {l (i)} dengan SUM {w
(i) l (i)}
Prosedur

• Kode direpresentasikan sebagai struktur pohon dimana setiap simpul memiliki berat
yang sesuai dan unique number.
• Berat setiap node harus seimbang dan tersusun secara decresing
• Penomeran dari kiri kekanan
• Satu set node dengan bobot yang sama membuat blok.
• Untuk mendapatkan kode untuk setiap node, dalam kasus pohon biner kita hanya
bisa melintasi semua jalan dari akar ke node, menuliskan (misalnya) "1" jika kita
pergi ke kanan dan "0" jika kita pergi sebelah kiri.
• Ketika kita mengirimkan simbol NYT kita harus mengirimkan kode untuk simpul NYT,
untuk kode generik.
• Untuk setiap simbol yang sudah di pohon kita hanya perlu mengirimkan kode untuk
simpul daun.
Prosedur (cont.)

• Untuk setiap simbol ditransmisikan pada kedua sisi kita harus melaksanakan prosedur
update:
• Jika simbol saat ini adalah NYT, tambahkan dua node anak NYT node, satu akan
menjadi NYT node baru yang lain adalah simpul daun untuk simbol kami,
meningkatkan berat untuk simpul daun baru dan NYT tua lanjutkan ke langkah 4 lagi
pergi ke simbol 's daun simpul NYT tua, lanjutkan ke langkah 4, lain pergi ke simbol s
daun simpul.
• Jika node ini tidak memiliki jumlah tertinggi di blok, tukarkan node tersebut dengan
yang memiliki jumlah tertinggi
• Meningkatkan berat badan untuk node
• Jika hal ini bukan simpul akar pergi ke node induk, lanjutkan langkah 2, sampai akhir
Catatan: swapping node berarti swapping berat dan simbol-simbol yang sesuai, namun
bukan angka.
Contoh (Pesan : aa bbb cc)

Input :
Output :
Simbol : NYT a b c spasi
Kode : 0
Input : a
Output : 1
Simbol : NYT a b c spasi
Kode : 0 1
Input : aa
Output : 11
Simbol : NYT a b c spasi
Kode : 0 1
Input : aa_
Output : 1101
Simbol : NYT a b c spasi
Kode : 00 1 01
Input : aa_b
Output : 110010001
Simbol : NYT a b c spasi
Kode : 00 1 0001 001
Input : aa_bb
Output : 1100100010001
Simbol : NYT a b c spasi
Kode : 00 1 0001 001
Konvert

Input : aa_bb
Output : 1010011111
Simbol : NYT a b c spasi
Kode : 00 10 11 01
Input : aa_bbb
Output : 101001111111
Simbol : NYT a b c spasi
Kode : 00 10 11 01
Input : aa_bbb_
Output : 10100111111101
Simbol : NYT a b c spasi
Kode : 00 10 11 01
Input : aa_bbb_c
Output : 10100111111101001
Simbol : NYT a b c spasi
Kode : 00 10 11 001 01
Input : aa_bbb_cc
Output : 10100111111101001001
Simbol : NYT a b c spasi
Kode : 00 10 11 001 01
Konvert Tree

Input : aa_bbb_cc
Output : 101001111111010000
Simbol : NYT a b c spasi
Kode : 00 10 11 00 01

c
Q&A

Thank You
Tugas.....

• Buatlah Makalah Algoritma :


1. Lempel Ziv 77 (LZ77) Encoding / Algorithm
2. Lempel Ziv 78 (LZ78) Encoding / Algorithm
3. Lempel Ziv Miller Wegman (LZMW) Encoding / Algorithm
4. Lempel Ziv Welch (LZW) Encoding / Algorithm
• Masing-masing Mahasiswa memilih 1 judul
• Makalah dikirim paling lambat 1 minggu setelah pertemuan ini
pukul 24.00 wita
• Makalah dikirim melalui email/WA
• Makalah dipresentasikan pada pertemuan akhir.
Referensi

• Pertimbangkan referensi berikut :


• Huang, Bormin : “Satellite Data Compression”, Springer
• Solomon david : “Data Compression 3 RD”, Spinger
• Situs paten tentang algoritma tersebut

Anda mungkin juga menyukai