KOMPRESI DATA : ALGORITMA HUFFMAN.

Slides:



Advertisements
Presentasi serupa
Matematika Diskrit Suryadi MT Tree.
Advertisements

Jenis Penyandian & OSI.
Situasi Saat Program Berjalan (Run-time Environment)
Kompresi Citra KOMPRESI CITRA Nurfarida Ilmianah.
Materi 3 Lapis Fisik Sinkronisasi dan Kompresi
Algoritma Greedy (lanjutan)
Bahan Kuliah IF2091 Struktur Diskrit
BAB 9 POHON.
Pohon.
Bahan Kuliah IF2120 Matematika Diskrit
Pohon (bagian ke 6) Matematika Diskrit.
Definisi Pohon (tree) adalah : Hutan (forest) adalah :
5. Pohon Merentang Minimum
Pencarian (Searching)
KOMPRESI Jim Michael Widi.
BAB 9 POHON.
4. Pohon (Tree) 4.1. Definisi Rekurens Dari Pohon
Representasi data multimedia
KOMPRESI DAN TEKS.
Pengkodean dan Error Control
Pengurai Prediktif & Bottom Up Parsing (penguraian bawah atas)
Hendrawan HUFFMAN CODING Hendrawan
KOMUNIKASI DATA SAHARI 8. Pemampatan.
Organisasi Berkas Sekuensial Berindeks
POHON (lanjutan 2).
REPRESENTASI DATA MULTIMEDIA
KOMPRESI TEKS Dr. Lily Wulandari.
MK SISTEM DIGITAL SESI II SISTEM BILANGAN
Algoritma Greedy (lanjutan)
Kompresi Gambar Klasifikasi Kompresi Teknik Kompresi 1.
Algoritma dan Struktur Data 1 pertemuan 6
POHON / TREE.
Menggambar Tree wijanarto.
Pengantar Multimedia Pertemuan 4 Kompresi Data
TEKNIK KOMPRESI LOSSLESS TEXT
PTI Semester Ganjil Lec 2. SISTEM BILANGAN.
P O H O N ( T R E E ) Fitri Utaminingrum
Pohon dan Pohon Biner Anifuddin Azis.
Matematika Diskrit Kode Huffman Heru Nugroho, S.Si., M.T.
TERAPAN POHON BINER.
Meminimalkan Kebutuhan Memori dalam Merepresentasikan Citra Digital
Algoritma dan Struktur Data Lanjut
Greedy Pertemuan 7.
BAB 10: POHON DAN APLIKASINYA
Program Studi Teknik Informatika STMIK AMIKOM Purwokerto
Diagram Pohon (Tree Diagram)
KOMPRESI DATA DAN TEKS Sindy Nova.
Algoritma Greedy (lanjutan)
POHON.
Algoritma dan Struktur Data Lanjut
Struktur Perulangan Yohana Nugraheni.
Kompresi Teks File.
Pertemuan 18 Optimalisasi Kode dan Mewarnai Graph I
Pohon.
Matematika Diskrit Semester Ganjil TA Kode Huffman.
PROBABILITAS DAN STATISTIK
01.3 Hari-1 Sesi-3 Desain Algoritma.
TUGAS MATEMATIKA DISKRIT KELAS B (POHON) Engelinus Nana ( ) Eka Christy ( ) Engelinus Nana ( ) Eka Christy ( )
Pohon Rinaldi M/IF2120 Matdis.
POHON Pohon (Tree) merupakan graph terhubung tidak berarah dan tidak mengandung circuit. Contoh: (Bukan) (Bukan) (Bukan)
Oleh : Devie Rosa Anamisa
HUFFMAN CODING.
Struktur Data.
SISTEM BILANGAN DAN KODE BILANGAN
KOMPRESI CITRA Edy Mulyanto.
Pertemuan 19 HUFFMAN CODE
Struktur Data.
1 Computer Security Compression. 2 Computer Security Compression Tujuan Untuk memampatkan text/ string Dampak Mempersingkat pengirimanan data di jaringan.
Pertemuan 10 Mata Kuliah Pengolahan Citra
Oleh : Rahmat Robi Waliyansyah, M.Kom.
Transcript presentasi:

KOMPRESI DATA : ALGORITMA HUFFMAN

Professor David A. Huffman Algoritma Huffman adalah algoritma kompresi statistik yang juga menghitung sebuah kode bebas prefiks (Mueller, 2003). Algoritma ini dibuat oleh David A. Huffman yang pada saat itu tercatat sebagai mahasiswa PhD di MIT pada tahun 1952, yang dipublikasikannya dalam makalah A Method for the Construction of Minimum-Redundancy Codes. Professor David A. Huffman (August 9, 1925 - October 7, 1999)

Motivasi Huffman menghemat antara 20% - 90% Ada 2 alasan sebagai motivasi dalam hal kompresi data, yaitu untuk mereduksi tempat (space) penyimpanan data pada disk atau tape mereduksi waktu untuk mentransmisikan file/data yang memiliki kapasitas besar Sumber gambar : plus.maths.org/issue23/ features/data/data.jpg Huffman menghemat antara 20% - 90%

Ide Dasar Coding Huffman : Utk sumber S = {x1, …, xn}; Probabilitas P = {p1, ….., pn}; Codewords {c1, ….., cn}; dan Panjang {l1, ….., ln}. Terdapat optimal binary prefix code dengan karakteristik : Teorema: (a) Jika pj > pi, maka lj  li (b) Dua codeword dari dua simbol dg probabilitas terendah mempunyai panjang yg sama (c) Dua codeword terpanjang identik kecuali pada digit terakhir

Contoh : LASCII = (35*8 + 17*8 + 17*8 + 16*8 + 15*8) * 1000 Sebuah file mempunyai 100.000 karakter yang dimisalkan terdiri dari huruf a sampai dengan f yang masing-masing mempunyai jumlah seperti yang tertera pada tabel. Misalkan kita representasikan file tersebut dengan menggunakan kode ASCII, maka besarnya panjang bit yang dibutuhkan untuk menyimpan file tersebut sama dengan : Simbol/Karakter a b c d e Frekuensi (dalam ribuan) 35 17 16 15 Kode ASCII 1100001 1100010 1100011 1100100 1100101 LASCII = (35*8 + 17*8 + 17*8 + 16*8 + 15*8) * 1000 = 800K bits

Variable-length codeword Can we do better ?? YES !! Dengan menggunakan variable-length codes sebagai pengganti fixed-length codes (ASCII). Jika misalkan saja sekarang kita telah mempunyai kode word baru untuk masing-masing karakter, maka panjang yang diperlukan sekarang menjadi : Simbol/Karakter a b c d e Frequency (in 1000s) 35 17 16 15 Kode ASCII 1100001 1100010 1100011 1100100 1100101 Variable-length codeword 101 100 111 1101

LVL = (35*1 + 17*3 + 17*3 + 16*3 + 15*4) * 1000 = 245K bits

STATIS DINAMIS/ADAPTIF HUFFMAN CODING STATIS DINAMIS/ADAPTIF

Huffman Coding direpresentasikan sebagai : Pohon Biner (pohon Huffman) dengan label nilai pada cabangnya (0, 1), 0 berarti menuju anak cabang yang kiri, dan 1 berarti kebalikannya Titik Akar, sebagai total dari penjumlahan bobot titik cabang Titik Cabang, sebagai jumlah bobot simbol dari penjumlahan titik daun atau cabang yang lain Titik Daun, sebagai simbol yang akan dikodekan

Huffman Coding Terdapat dua jenis pohon Huffman Pohon Huffman vertikal Pohon Huffman horisontal 6

Algoritma Huffman Statis 1. Langkah pertama Baca (scan) file input dari awal hingga akhir untuk menghitung frekuensi kemunculan tiap karakter dalam file. n jumlah semua karakter dalam file input. T daftar semua karakter dan nilai peluang kemunculannya dalam file input. Tiap karakter menjadi node daun pada pohon Huffman. 2. Langkah kedua Ulangi sebanyak (n -1) kali : a. Item m1 dan m2 dua subset dalam T dengan nilai peluang yang terkecil. b. Gantikan m1 dan m2 dengan sebuah item {m1,m2} dalam T, dimana nilai peluang dari item yang baru ini adalah penjumlahan dari nilai peluang m1 dan m2. c. Buat node baru {m1, m2} sebagai father node dari node m1 dan m2 dalam pohon Huffman. 3. T sekarang tinggal berisi satu item, dan item ini sekaligus menjadi node akar pohon Huffman. Panjang kode untuk suatu simbol adalah jumlah berapa kali simbol tersebut bergabung dengan item lain dalam T.

Contoh Jika diketahui kemunculan karakter dari sebuah file sebagai berikut : Simbol a b c d e Frekuensi kemunculan 35 17 16 15 Peluang 0.35 0.17 0.16 0.15 karakter tersebut mempunyai panjang kode sesuai ASCII, maka file tersebut memiliki kapasitas sebesar : 35*8+17*8+17*8+17*8+16*8+15*8 = 800 bit

Membuat pohon Huffman : Membuat titik daun dan mengurutkannya dari yang memiliki bobot kemunculan paling sedikit disebelah kiri sampai ke bobot kemunculan paling banyak di sebelah kanan e-15 d-16 c-17 b-17 a-35

b. Menggabungkan titik daun terendah dan mengurutkan kembali dari bobot terkecil ke yang besar, ulangi sampai menjadi hanya satu titik, yaitu titik akar pohon edcba- 100 Edcb- 65 ed-31 cb-34 e-15 d-16 c-17 b-17 a-35

c. Memberi kode pada pohon yang telah terbentuk, “0” untuk setiap cabang yang kekiri dan “1” untuk pencabangan yang kekanan edcba- 100 1 Edcb- 65 a-35 1 ed-31 cb-34 1 1 e-15 d-16 c-17 b-17

Dari pohon Huffman dapat dibuat tabel codeword Maka sekarang panjang codeword hasil kompresi dari file diatas = 35*1 + 17*3 + 17*3 + 16*3 + 15*3 = 230 bit Simbol/Karakter a b c d e Frekuensi (dalam ribuan) 35 17 16 15 Kode Huffman 1 011 010 001 000

Kualitas kompresi Entropi pesan tersebut adalah: = 2,232 Total kode = 230 bit Kode rata-rata = 2,3 bit/karakter Faktor kompresi = 800 bit / 230 bit = 3,478 Rasio kompresi = 230 bit / 800 bit = 0,2875 (pengecilan 71,25%). Redundansi = 2,3 – 2,232 = 0,068. Efesiensi = (2,232/2,3)x100% = 97,043%

Latihan Sekarang bila ada pesan “gadjahmada” bagaimana hasil kompresinya?

Pesan masukan: ‘gadjahmada’ Karakter tingkat kemunculan a 4 d 2 g 1 h 1 j 1 m 1 Jumlah 10 dengan ASCII, kode menjadi 10 X 8 bit = 80 bit.

Pembentukan Pohon Huffman Vertikal j h g d a 1 4 2 6 10 m j h g d a 1 4 2 6 10 Karakter tingkat kode 1 kode 2 kemunculan a 4 0 00 d 2 10 01 g 1 1100 100 h 1 1101 101 j 1 1110 110 m 1 1111 111

Runtun kode yang dihasilkan pesan g a d j a h m a d a kode 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 0 1 0 0 kode 2 1 0 0 0 0 0 1 1 1 0 0 0 1 0 1 1 1 1 0 0 0 1 0 0 Jumlah kode: 24 bit Karakter tingkat kode 1 kode 2 kemunculan a 4 0 00 d 2 10 01 g 1 1100 100 h 1 1101 101 j 1 1110 110 m 1 1111 111

Pembentukan Pohon Huffman Horisontal Tuliskan semua karakter beserta bobot di ujung kiri diurutkan dari karakter yang mempunyai bobot paling besar. Jika terdapat beberapa karakter dengan bobot sama, maka urutkan karakter tersebut berdasarkan ASCII. Jumlahkan dua bobot terbawah dan urutkan kembali bobot yang ada. Ulangi kembali langkah tersebut hingga didapat suatu ujung yang merupakan hasil penjumlahan semua tingkat kemuncukan semua karakter. Beri nilai 0 atau 1 pada setiap cabang. Untuk mendapatkan kode masing-masing karakter, ikuti jalur dari ujung kanan diagram hingga karakter masukan di sebelah kiri.

Pembentukan Pohon Huffman Horisontal 4 4 4 6 a 1 10 2 2 4 d 4 1 6 1 2 g 2 1 4 1 1 h 1 2 1 1 j 1 2 Karakter tingkat kode kemunculan a 4 0 d 2 10 g 1 1101 h 1 1100 j 1 1111 m 1 1110 1 m

Runtun kode yang dihasilkan g a d j a h m a d a 1 1 0 1 0 1 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 g a d j a h m a d a Jumlah kode: 24 bit Karakter kode a 0 d 10 g 1101 h 1100 j 1111 m 1110

Kualitas Kompresi Entropi pesan tersebut adalah: = 2,32 Total kode = 24 bit Kode rata-rata = 2,4 bit/karakter Faktor kompresi = 80 bit / 24 bit = 3,33 Rasio kompresi = 24 bit / 80 bit = 0,3 (pengecilan 70%). Redundansi = 2,4 – 2,32 = 0,08.

Huffman Coding Tergantung pada bagaimana memilih probabilitas terendah saat membangun pohon Huffman  Pohon Huffman tidak unik Namun, panjang rata-rata codeword selalu sama untuk pohon yang berbeda

Huffman Decoding Proses coding : mentransmisikan codeword sesuai dengan simbol-simbol yg akan dikirim Untuk decode pesan, konversi tabel kode Huffman harus diketahui penerima  dapat dibangun pohon Huffman Masalah: pengirim (encoder) dan penerima (decoder) harus menggunakan coding (pohon Huffman) yang sama

Algoritma Huffman decoding Membaca statistik dari header input pesan Menghitung kode Huffman dengan menghitung pohon Huffman sebagai berikut : a. Dimulai dari akar pohon b. Memeriksa element/karakter selanjutnya dari input c. Jika bernilai 1, menuju arah kanan anak cabang d. Jika bernilai 0, menuju arah kiri akan cabang. e. Jika hasilnya merupakan titik daun (sesuai tabel konversi), maka Keluarkan simbol aslinya, dan Kembali ke langkah a f. Jika hasilnya bukan titik daun, maka kembali kelangkah 2 3. Mengganti semua kata kode input dengan huruf masing-masing dan menulis hasil ke pesan keluaran

contoh Pesan yang diterima adalah 1 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0 1 1 1 1 0 1 0 0 Dengan tabel kode Huffman : Karakter kode a 0 d 10 g 1101 h 1100 j 1110 m 1111

adghjm,10 1 a,4 dghjm,6 1 d,2 ghjm,4 1 gh,2 jm,2 1 1 g,1 H,1 j,1 m,1

Proses Dekompresi Set/periksa codeword sampai habis Baca bit selanjutnya dari bitstream dan lampirkan ke bit eksisting dalam codeword Periksa apakah semua codeword sudah tersimpan dalam tabel codeword, - jika belum, kembali kelangkah 2 - jika sudah, lanjutkan proses ke langkah 4 Panggil kode karakter ASCII yang berkesesuaian kedalam buffer penerima Periksa apakah semua bitstraem telah diproses, - jika belum, ulangi ke langkah 1 - jika sudah, proses selesai

Proses Dekompresi bit stream yang diterima : 1101 0 10 1110 0 1100 1111 0 10 0 kode Huffman a = 0 d = 10 g = 1101 h = 1100 j = 1110 m = 1111 1100111 1100001 1100100 1101010 1100001 1101000 1101101 1100001 1100100 1100001 g a d j a h m a d a

Adaptive Huffman Coding Adaptive Huffman coding dikembangkan oleh Newton Faller (1973) dan Robert G Gallager (1978) kemudian diperbaiki oleh Donald Knuth (1985) dan Jeffrey S. Vitter (1987) Adaptive coding adalah metoda yang secara dinamis meng-update dua pohon Huffman identik di Encoder dan Decoder (didasarkan pada informasi text yang sudah dikirim sampai saat ini)

Adaptive Huffman Coding Definisi: Suatu pohon binary dimana titiknya mempunyai counter frekuensi (kemunculan) memiliki sifat saudara kandung (sibling property) jika tiap titik (kecuali akar) saat scanning (breadth-first-right-to-left tree) membangkitkan urutan (list) dari titik-titk yang mempunyai harga counter frekuensi yg tidak meningkat. Teorema (Faller-Gallager Theorem) Suatu pohon dengan sibling property adalah suatu pohon Huffman

Adaptive Huffman Coding Pada adaptive Huffman coding, pohon mencakup counter untuk tiap simbol, dan suatu counter di perbaharui (update) setiap input simbol yang sesuai kemudian dikodekan Memeriksa apakah sibling property dipertahankan menjamin pohon Huffman yang sedang dibangun tetap Huffman pohon Jika sibling property dilanggar, pohon harus direstrukturisasi untuk mengembalikan sifat ini Algoritma mempunyai link list nodes berisi titik-titik dari pohon diurut berdasarkan scanning pohon breadth-first-right-to-left Bloki adalah bagian dari daftar urut dimana tiap titik mempunyai frekuensi i, dan titik pertama dari tiap blok disebut leader

Adaptive Huffman Coding titik 7 3 4 1 2 2 2 b c a 1 1 d 1 e Urutan titik = (7 4 3 2 2 2 1 1 1 1 0) Mempunyai 6 blok, yaitu blok7, blok4, blok3, blok2, blok1 dan blok0 dengan leader terlihat pada yang ber-angka tebal Simbol-simbol yang belum digunakan disimpan pada titik dengan frekuensi 0  0-titik

Algoritma adaptive Huffman coding Inisialisasi pohon Huffman Baca karakter dari input Jika karakter telah disimpan dalam pohon keluarkan kode untuk karakter tersebut tambahkan bobot karakter dalam pohon aktual Maka kode NYT dan keluarkan kode ASCII karakter Tambah bobot NYT Tambah simpul baru dengan karakter dan bobot 1 Periksa jika pohon aktual masih pohon Huffman atau tidak Jika tidak, restrukturisasi pohon untuk kembali menjadi pohon Huffman

Algoritma adaptive Huffman decoding Inisialisasi pohon Huffman Baca kode karakter dari stream input Jika karakter sama dengan kode NYT baca dan keluarkan karakter ASCII karakter berikut dari stream input tambahkan bobot NYT dalam pohon Huffman tambah karakter ke pohon dengan bobot 1 Maka keluaran karakter memiliki codeword Tambah bobot karakter dalam pohon Periksa jika pohon aktual masih pohon Huffman atau tidak Jika tidak, restrukturisasi pohon untuk kembali menjadi pohon Huffman

Contoh Kompresikan dengan menggunakan algoritma adaptive Huffman input data berikut : banana

Inisialisasi pohon r NYT 1 Karakter Output b ‘b’ NYT 1 b

r Karakter Output b ‘b’ NYT 1 b 1 a 0 ’a’ 1 1 b NYT 1 a

Karakter Output a 0 ’a’ n 00 ’n’ 2 3 3 1 1 b 1 a 1 2 1 2 b b 1 1 1 1 a NYT 1 a 3 n 00 ’n’ 3 2 1 b 2 1 b 1 1 a 1 1 a NYT 1 a NYT 1 a

Karakter Output n 00 ’n’ a 11 3 3 4 5 2 1 b 2 1 b 1 1 a 1 1 a 1 n 1 n NYT 1 n NYT 1 n 4 5 a 11 3 3 1 b 2 a 1 2 a 1 1 b NYT 1 n NYT 1 n

Karakter Output a 11 n 101 4 5 5 5 3 3 1 b 2 a 1 2 a 1 1 b 1 n 1 n 3 3 NYT 1 n NYT 1 n 5 5 n 101 3 3 2 a 2 a 2 1 b 1 2 n NYT 2 n NYT 1 b

Karakter Output n 101 a 5 5 6 3 3 2 a 2 a 2 1 b 1 2 n 2 n 1 b 3 3 a 1 NYT 2 n NYT 1 b a 6 3 3 a 1 2 n NYT 1 b

Maka hasil kompresi untuk stream data diatas 1100010 01100001 001101110 11 101 0 b a n a n a Karakter terkirim = 6 Bit tanpa kompresi = 48 Bit hasil kompresi = 33 Rasio kompresi = 31.25 %

Latihan Suatu urutan input : g a d j a h m a d a Akan dikompres dengan algoritma Adaptive Huffman Coding

g 1 12 *0 NYT 1 g 10 11 Karakter terkompresi : g

g a 2 1 12 NYT 1 g 1 *0 NYT 10 1 a 11 8 9 Karakter terkompresi : g 0a

g a d g 0a 00d 3 2 Karakter terkompresi : 2 1 1 g 1 1 a 1 d 12 10 11 8 NYT 10 1 a 11 1 8 9 NYT 1 d 6 7 Karakter terkompresi : g 0a 00d

g a d j g 0a 00d 100j 4 2 Karakter terkompresi : 3 1 g 2 1 1 a 1 1 d 1 12 1 g 2 11 10 1 2 1 a 8 NYT 1 d 1 9 6 7 NYT 1 j 4 5 Karakter terkompresi : g 0a 00d 100j

g a d j a g 0a 00d 100j 11 5 3 2 Karakter terkompresi : 4 2 2 1 g 1 d 12 2 3 2 11 10 1 g 1 d 1 a 2 1 6 8 7 9 NYT 1 j 4 5 Karakter terkompresi : g 0a 00d 100j 11

g a d j a h g 0a 00d 100j 11 000h 6 4 2 Karakter terkompresi : 5 2 2 1 12 2 2 4 11 10 1 g 1 d 2 a 2 1 6 8 7 9 NYT 1 j 1 4 5 NYT 1 h 2 3 Karakter terkompresi : g 0a 00d 100j 11 000h

g a d j a h m g 0a 00d 100j 11 000h 1000m 7 3 2 Karakter terkompresi : 6 12 3 2 4 11 10 2 1 d 2 a 1 g 8 7 2 1 9 6 1 j 4 5 NYT 1 h 1 2 3 NYT 1 m 1 Karakter terkompresi : g 0a 00d 100j 11 000h 1000m

g a d j a h m a 7 8 12 3 4 5 10 11 2 2 2 a 3 1 g 8 7 1 d 9 6 1 h 1 j 1 2 4 5 3 NYT 1 m 1 Karakter terkompresi : g 0a 00d 100j 11 000h 1000m 11

g a d j a h m a d 8 9 12 4 3 5 10 11 3 a 1 g 2 2 7 8 9 6 1 h 1 d 2 1 j 1 2 3 4 5 NYT 1 m 1 Karakter terkompresi : g 0a 00d 100j 11 000h 1000m 11 100

g a d j a h m a d a 10 9 12 4 5 6 10 11 3 a 4 2 d 2 2 7 8 9 6 1 h 1 g 1 j 1 2 3 4 5 NYT 1 m 1 Karakter terkompresi : g 0a 00d 100j 11 000h 1000m 11 100 11

Karakter terkirim = 10 Bit tanpa kompresi = 80 Bit hasil kompresi = 70 Rasio kompresi = 12.5 %