Binary Heap & Huffman Code - IKI10400 - 2013/14 Past Paper PDF
Document Details
Uploaded by Deleted User
Universitas Indonesia
2013
IKI10400
Suryana Setiawan, Ade Azurat, Denny, Ruli Manurung
Tags
Summary
This document is a lecture from Universitas Indonesia on Binary Heap and Huffman Code, presented in 2013. It details the theory, properties, and operations of binary heaps and the algorithms.
Full Transcript
IKI10400 Struktur Data & Algoritma: Binary Heap & Huffman Code Fakultas Ilmu Komputer Universitas Indonesia Slide acknowledgments: Suryana Setiawan, Ade Azurat, Denny, Ruli Manurung Fasilkom UI IKI10400 Struktur Data & Al...
IKI10400 Struktur Data & Algoritma: Binary Heap & Huffman Code Fakultas Ilmu Komputer Universitas Indonesia Slide acknowledgments: Suryana Setiawan, Ade Azurat, Denny, Ruli Manurung Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 1 BINARY HEAP Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 2 Review Complete binary tree: sebuah tree adalah terisi penuh (complete), kecuali pada level terbawah yang terisi dari kiri ke kanan. A B C D E F G H I J A B C D E F G H I J 0 1 2 3 4 5 6 7 8 9 10 11 12 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 3 Priority Queue Sebuah queue dengan perbedaan aturan sebagai berikut: operasi enqueue tidak selalu menambahkan elemen pada akhir queue, namun, meletakkannya sesuai urutan prioritas. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 4 Binary Heap Hanya diperbolehkan mengakses (membaca) item yang minimum. operasi dasar: menambahkan item baru dengan kompleksitas waktu worst-case yang logaritmik. menghapus item yang minimum dengan kompleksitas waktu worst- case yang logaritmik. mencari item yang minimum dengan kompleksitas waktu konstan. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 5 Properties (Aturan) Structure Property Data disimpan pada complete binary tree tree selalu balance. seluruh operasi dijamin O(log n) pada worst case data disimpan menggunakan array atau java.util.Vector Ordering Property Heap Order: Parent Child P PX X Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 6 Mana yang Binary Heap? 1 1 1 2 2 3 2 2 2 3 2 3 1 13 21 16 3 2 6 31 19 68 2 65 26 32 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 7 Representasi Heap Root pada indeks 0 -1 anak kiri dari i pada indeks 2i + 1 0 1 anak kanan dari i pada indeks 2i + 2 = 2(i + 1) 43 3 3 2 Parent dari i pada indeks floor((i - 1) / 2) 65 58 40 42 4 -1 0 1 43 3 3 2 65 58 40 42 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 8 Find Minimum Bagaimana cara mengakses elemen terkecil? Return root -> konstan 13 21 16 26 31 19 68 65 26 32 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 9 Insertion Masukkan elemen baru ke: Level paling bawah yang masih ada slot kosongnya, bila level sudah penuh, buat level baru lagi. Letakkan elemen baru tersebut di slot kosong paling kiri. Tetap menjaga complete binary tree. Bila node parent lebih besar, tukar elemen dengan parent-nya. Lakukan hal tersebut sampai root (percolate up) -> menjaga heap order Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 10 Insertion Insert 2 (Percolate Up) -1 0 1 43 5 3 8 65 58 40 42 4 2 -1 0 1 43 5 3 8 65 58 40 42 4 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 11 Insertion Insert 2 (Percolate Up) -1 0 1 43 5 2 8 65 58 40 42 4 3 3 8 65 58 40 42 4 2 -1 0 1 43 5 2 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 12 Insertion Insert 14 13 21 16 24 31 19 68 65 26 32 14 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 13 Insertion Insert 14 13 21 16 24 14 19 68 65 26 32 31 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 14 Insertion Insert 14 13 14 16 24 21 19 68 65 26 32 31 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 15 Delete Minimum Hanya root yang dapat dihapus. Mengapa? Kita hanya dapat mengakses elemen terkecil saja. Tukar root dengan elemen paling kanan di level paling bawah. Lakukan percolate down: Dimulai dari root, cari anak terkecil dari node tersebut, bila anak terkecilnya < node yang sedang dikunjungi, tukar node tsb. Lakukan sampai anak terkecil dari node yang dikunjungi tidak < dari node yang dikunjungi atau sudah mencapai leaf. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 16 Delete Minimum Percolate Down -1 0 1 43 3 3 2 65 58 40 42 4 -1 0 1 43 3 3 2 65 58 40 42 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 17 Delete Minimum 4 0 1 43 3 3 2 65 58 40 42 4 0 1 43 3 3 2 65 58 40 42 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 18 Delete Minimum: Completed 0 3 1 43 4 3 2 65 58 40 42 0 3 1 43 4 3 2 65 58 40 42 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 19 Delete Min (2) 13 14 16 19 21 19 68 65 26 32 31 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 20 Delete Min (2) Percolate Down 14 16 19 21 19 68 65 26 32 31 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 21 Delete Min (2) 14 16 19 21 19 68 65 26 32 31 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 22 Delete Min (2) 14 19 16 21 19 68 65 26 32 31 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 23 Delete Min (2) 14 19 16 26 21 19 68 65 32 31 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 24 Delete Min (2) 14 19 16 26 21 19 68 65 31 32 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 25 Latihan Simulasi operasi-operasi berikut pada Min Binary Heap: Insert: 40, 20, 5, 55, 76, 31, 3 Delete Min Delete Min Insert: 10, 22 Delete Min Delete Min Gambarkan isi Binary Heap, setelah operasi terakhir. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 26 Heap Constructor public class VectorHeap implements PriorityQueue { protected Vector data; public VectorHeap() { data = new Vector(); } public VectorHeap(Vector v) { int i; data = new Vector(v.size()); // we know ultimate size for (i = 0; i < v.size(); i++) { // add elements to heap add((Comparable) v.elementAt(i)); } } Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 27 Heap’s Methods protected static int parentOf(int i) { return (i - 1) / 2; } protected static int leftChildOf(int i) { return 2 * i + 1; } protected static int rightChildOf(int i) { return 2 * (i + 1); } public Comparable peek() { // findMin return (Comparable) data.elementAt(0); } Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 28 Removal & Insertion public Comparable remove() { Comparable minVal = peek(); data.setElementAt ( data.elementAt (data.size() - 1), 0); data.setSize (data.size() - 1); if (data.size() > 1) pushDownRoot(0); return minVal; } public void add(Comparable value) { data.addElement (value); percolateUp (data.size() - 1); } Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 29 Percolate Down protected void pushDownRoot (int root) { int heapSize = data.size(); Comparable value = (Comparable) data.elementAt (root); while (root < heapSize) { int childpos = leftChildOf(root); if (childpos < heapSize) { // choose the smallest child if ((rightChildOf(root) < heapSize) && (((Comparable) (data.elementAt( childpos+1))).compareTo ((Comparable) (data.elementAt( childpos))) < 0)) { childpos++; } Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 30 Percolate Down if (((Comparable)(data.elementAt( childpos))).compareTo (value) < 0) { data.setElementAt ( data.elementAt(childpos), root); root = childpos; // keep moving down } else { // found right location data.setElementAt(value, root); return; } } else { // at a leaf! insert and halt data.setElementAt (value, root); return; } } } Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 31 Percolate Up protected void percolateUp (int leaf) { int parent = parentOf(leaf); Comparable value = (Comparable)(data.elementAt(leaf)); while (leaf > 0 && (value.compareTo ((Comparable)(data.elementAt(parent))) < 0)) { data.setElementAt (data.elementAt (parent), leaf); leaf = parent; parent = parentOf(leaf); } data.setElementAt(value,leaf); } Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 32 Heap’s Methods public boolean isEmpty() { return data.size() == 0; } public int size() { return data.size(); } public void clear() { data.clear(); } public String toString() { return ""; } Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 33 fixHeap Algorithm Versi rekursif: fixHeap left subtree n fixHeap right subtree percolateDown root Tidak efektif! Ada cara lain yang lebih efisien: Panggil percolateDown menggunakan reverse level order pada non-leaves node 92 Saat pemanggilan percolateDown pada node 47 21 n, sub tree dibawahnya akan dijamin sudah memenuhi 20 12 45 63 heap order 61 17 55 37 25 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 34 Fix Heap / Heapify Operasi fixHeap menerima complete tree yang tidak memenuhi heap order dan memperbaikinya. penambahan sebanyak N dapat dilakukan dengan O(n log n) Operasi fix heap dapat dilakukan dengan O(n) ! 92 47 21 20 12 45 63 61 17 55 37 25 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 35 Fix Heap / Heapify Percolate down 6 92 47 21 20 12 45 63 61 17 55 37 25 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 36 Fix Heap / Heapify Percolate down 5 92 47 21 20 12 45 25 63 61 17 55 37 25 45 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 37 Fix Heap / Heapify Percolate down 4 92 47 21 20 12 25 63 61 17 55 37 45 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 38 Fix Heap / Heapify Percolate down 3 92 47 21 20 17 12 25 63 61 17 20 55 37 45 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 39 Fix Heap / Heapify Percolate down 2 92 47 21 17 12 25 63 61 20 55 37 45 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 40 Fix Heap / Heapify Percolate down 1 92 47 12 21 17 12 37 25 63 61 20 55 37 47 45 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 41 Fix Heap / Heapify Percolate down 0 92 12 12 17 21 17 20 37 25 63 61 20 92 55 47 45 64 83 73 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 42 Max Heap 97 53 59 26 41 58 31 16 21 36 97 53 59 26 41 58 31 16 21 36 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 43 Heap setelah deleteMax pertama 59 53 58 26 41 36 31 16 21 97 59 53 58 26 41 36 31 16 21 97 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 44 Heap setelah deleteMax kedua 58 53 36 26 41 21 31 16 59 97 58 53 36 26 41 21 31 16 59 97 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 45 Heap Sort 1. Buat sebuah heap tree 2. ambil elemen pada posisi root dari heap setiap pengambilan elemen, dan lakukan heapify. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 46 Rangkuman Priority queue dapat diimplementasi kan menggunakan binary heap Aturan-aturan pada binary heap structure property complete binary tree ordering property Heap order: Parent Child Operasi pada binary heap insertion: kompleksitas waktu O(log n) pada worst case find min: kompleksitas waktu O(1) delete min: kompleksitas waktu O(log n) pada worst case Binary heap dapat digunakan untuk sorting Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 47 HUFFMAN CODE Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 48 Outline Compression Huffman compression Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 49 Kompresi (Compression) Proses: Encoding: raw compressed Decoding: compressed raw Jenis Kompresi Lossy: data yang dikompres kemungkinan tidak memiliki kualitas yang sama persis dengan data asli. Contoh: MPEG, JPEG, MP3 Lossless: data yang dikompresi dapat dikembalikan menjadi data asli tanpa kehilangan kualitas data. Contoh: zip, GIF, wav Beberapa algoritma kompresi: RLE: Run Length Encoding Lempel-Zif Huffman Encoding Tingkat kompresi bergantung pada jenis file. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 50 Huffman Compression: Motivation Perhatikan teks berikut: If a woodchuck could chuck wood! Terdiri dari 32 karakter, masing-masing karakter diencode dengan 8 bit ASCII code. Untuk menyimpan kalimat diatas membutuhkan 256 bit. 32 char 8 bit = 256 bits Teori: Untuk meng-encode N karakter yang berbeda dibutuhkan log2 N bit Observasi: Ada 13 karakter berbeda 4 bit Kalimat diatas dapat di kompres sehingga hanya membutuhkan 128 bits Apakah menggunakan encoding dengan panjang bit berbeda dapat memperbaiki tingkat kompresi ? Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 51 Huffman Compression: Ide Untuk karakter yang sering muncul, gunakan representasi encoding yang pendek. Untuk karakter yang jarang muncul, gunakan representasi encoding yang panjang. Bila panjang bit encoding tiap karakter beda-beda, bagaimana memisahkan sekumpulan bit encoding dengan bit encoding karakter lain? Prefix code: Tidak ada code encoding sebuah karakter yang merupakan prefix dari code encoding karakter lain. Prefix code dimodelkan dengan tree, data hanya pada leaves ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 52 Huffman Encoding: perbandingan Menggunakan encoding dengan panjang bits sama. Ada 4 karakter, masing-masing di encode dengan 2 bits. Karakter a muncul 8 kali, i 5 kali, u dan e masing-masing 3 kali. Panjang bit yang dibutuhkan: 42 bit a = 00 16 bits 0 1 i = 01 10 bits u = 10 6 bits 00 01 10 11 e = 11 6 bits Total : 38 bits a i u e 8 5 3 3 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 53 Huffman Encoding: perbandingan Menggunakan encoding dengan panjang bits berbeda-beda. Karakter a di encode dengan binary code: 0, i dengan 10, u dengan 110, dan e dengan 111. Panjang bit yang dibutuhkan: 36 bit Kesimpulan: lebih baik dari pada encoding yang fixed length. a=0 8 bits 1 i = 10 10 bits u = 110 9 bits 11 e = 111 9 bits Total: 36 bits 0 10 110 111 a i u e 8 5 3 3 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 54 Huffman Code Algoritma Huffman digunakan untuk menggenerate prefix code. Prefix code: Tidak ada code encoding sebuah karakter yang merupakan prefix dari code encoding karakter lain. Prefix code dimodelkan dengan tree, data hanya pada leaves ! Walau algoritma Huffman hanya salah satu algoritma untuk menghasilkan prefix code, istilah huffman code lebih umum dikenal dari pada prefix code. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 55 Huffman Encoding 0 1 0 1 1 0 0 1 0 1 1 0 0 1 d 1 0 0 1 c space o 0 1 u k w 0 1 h ! 0 1 I f a l Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 56 Huffman Encoding 32 13 19 7 9 10 6 4 4 d:3 o:5 3 c:5 space:5 u:3 k:2 w:2 2 2 h:2 !:1 I:1 f:1 a:1 l:1 Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 57 Huffman Encoding (freq) ! = 0000 (1) I = 10000 (1) a = 00010 (1) f = 10001 (1) l = 00011 (1) h = 1001 (2) u = 001 (3) c = 101 (5) d = 010 (3) space = 110 (5) k = 0110 (2) o = 111 (5) w = 0111 (2) Cost: di * fi = 111 bits = 44% 256 bits Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 58 Huffman Encoding: langkah-langkah 5 o 5 5 c 3 u 3 d 2 k 2 2 2 w h 1 1 I 1 f 1 1 ! a l Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 59 Huffman Encoding: langkah-langkah 5 o 5 5 c 3 u 3 d 2 k 2 2 2 w h 2 1 1 1 I f ! a l Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 60 Huffman Encoding: langkah-langkah 5 o 5 5 c 3 u 3 3 d 2 k 2 2 w h 2 2 1 I a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 61 Huffman Encoding: langkah-langkah 5 o 5 5 c 3 u 3 3 d 4 2 I 2 2 2 k h w f ! a l Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 62 Huffman Encoding: langkah-langkah 5 o 5 5 c 4 3 4 h w 3 3 2 I u 2 d k f ! a l Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 63 Huffman Encoding: langkah-langkah 5 o 5 5 c 4 4 3 6 3 3 h w u d k I a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 64 Huffman Encoding: langkah-langkah 6 u d 5 o 5 5 4 3 c 4 I k h w a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 65 Huffman Encoding: steps 6 u d 5 7 o 5 5 4 3 c 4 I k h w a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 66 Huffman Encoding: langkah-langkah 7 I k a l f ! 9 6 5 5 5 4 u d o c h w Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 67 Huffman Encoding: langkah-langkah 9 c 7 h w 6 10 I k 5 5 a l u d o f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 68 Huffman Encoding: langkah-langkah 10 o 9 13 7 c h w 6 I k u d a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 69 Huffman Encoding: langkah-langkah 13 19 10 9 o c I k u d h w a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 70 Huffman Encoding: langkah-langkah 32 19 13 o c h w I k u d a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 71 Huffman Encoding: langkah-langkah Total: 111 bits o c h w I k u d a l f ! Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 72 Rangkuman Huffman encoding menggunakan informasi frekuensi kemunculan untuk meng-kompres file. Karakter dengan kemunculan paling tinggi di berikan encoding yang paling pendek dan sebaliknya. Penentuan code encoding menggunakan representasi binary tree. Fasilkom UI IKI10400 Struktur Data & Algoritma 2013/14 Gasal Kuliah 11 73