Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

KOMPRESI DATA : ALGORITMA HUFFMAN.

Presentasi serupa


Presentasi berjudul: "KOMPRESI DATA : ALGORITMA HUFFMAN."— Transcript presentasi:

1 KOMPRESI DATA : ALGORITMA HUFFMAN

2 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, October 7, 1999)

3 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%

4 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

5 Contoh : LASCII = (35*8 + 17*8 + 17*8 + 16*8 + 15*8) * 1000
Sebuah file mempunyai 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 LASCII = (35*8 + 17*8 + 17*8 + 16*8 + 15*8) * 1000 = 800K bits

6 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 Variable-length codeword 101 100 111 1101

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

8 STATIS DINAMIS/ADAPTIF
HUFFMAN CODING STATIS DINAMIS/ADAPTIF

9 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

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

11 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.

12 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

13 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

14 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

15 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

16 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

17 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, (pengecilan 71,25%). Redundansi = 2,3 – 2,232 = 0,068. Efesiensi = (2,232/2,3)x100% = 97,043%

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

19 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.

20 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 d g h j m

21 Runtun kode yang dihasilkan
pesan g a d j a h m a d a kode kode Jumlah kode: 24 bit Karakter tingkat kode 1 kode 2 kemunculan a d g h j m

22 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.

23 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 g h j m 1 m

24 Runtun kode yang dihasilkan
g a d j a h m a d a 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

25 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.

26 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

27 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

28 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

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

30 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

31 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

32 Proses Dekompresi bit stream yang diterima :
kode Huffman a = 0 d = 10 g = 1101 h = 1100 j = 1110 m = 1111 g a d j a h m a d a

33 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)

34 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

35 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

36 Adaptive Huffman Coding
titik 7 3 4 1 2 2 2 b c a 1 1 d 1 e Urutan titik = ( ) 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

37 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

38 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

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

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

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

42 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

43 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

44 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

45 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

46 Maka hasil kompresi untuk stream data diatas
b a n a n a Karakter terkirim = 6 Bit tanpa kompresi = 48 Bit hasil kompresi = 33 Rasio kompresi = %

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

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

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

50 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

51 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

52 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

53 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 h

54 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 h 1000m

55 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 h 1000m 11

56 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 h 1000m

57 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 h 1000m

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


Download ppt "KOMPRESI DATA : ALGORITMA HUFFMAN."

Presentasi serupa


Iklan oleh Google