1 / 31

Kompresi

Algoritma dan Struktur Data Lanjut. Kompresi. Kompresi. Kompresi merupakan proses pengubahan sekumpulan data menjadi suatu bentuk kode untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data. Kompresi dapat diterapkan untuk: - File Teks - File Gambar - File Audio

storm
Download Presentation

Kompresi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritma dan Struktur Data Lanjut Kompresi

  2. Kompresi • Kompresi merupakan proses pengubahan sekumpulan data menjadi suatu bentuk kode untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data. • Kompresi dapat diterapkan untuk: - File Teks - File Gambar - File Audio - File Video

  3. MetodedalamKompresi • Ada 3 metode yang digunakan dalam kompresi: - Kompresi Lossy - Kompresi Lossless - Kompresi Delta

  4. KompresiLossy • Suatu metode kompresi data yang menghilangkan sebagian “Informasi” dari file asli (file yang akan dimampatkan) selama proses kompresi berlangsung dengan tidak menghilangkan (secara signifikan) informasi yang ada dalam file secara keseluruhan. • Contoh: pada kompresi file gambar. Merubah detail dan warna sebuah file gambar menjadi lebih sederhana dan mempunyai kapasitas file menjadi lebih kecil tanpa terlihat perbedaan mencolok dari pandangan manusia.

  5. Kompresi Lossless • Metode kompresi data dimana tidak ada “Informasi” / data yang hilang atau berkurang jumlahnya selama proses kompresi, sehingga pada proses dekompresi jumlah bit (byte) data atau informasi dalam keseluruhan file hasil sama persis dengan file aslinya.

  6. Kompresi Delta • Delta Comression mengirimkan semua informasi state, memungkinkan hanya mengirim perubahan/update (delta) dari state sebelumnya. Efeknya, membutuhkan pengiriman data yang reliable (contoh TCP). Efektif jika state game world besar, namun perubahan yang ada kecil.

  7. AlgortimaKompresi • Algoritma Huffman • Algoritma LZW (Lempel-Ziv-Welch) • Algoritma DMC (Dynamic Marcov Compression) • Dsb

  8. Kompresi Data Teks • Kompresi Teks menggunakan metode Lossless. • Karena jika menghilangkan beberapa karakter akan merubah arti dari teks aslinya. Kompresi Teks ada 2 macam: • Character-based Frequency counting • Huffman Encoding, Arithmetic Encoding • Word-based Frequency counting • Lempel-Ziv (LZ) algorithm

  9. Algoritma Huffman • Dibuat oleh seorang mahasiswa MIT bernama David Huffman. • Merupakan salah satu metode paling lama dan paling terkenal dalam kompresi teks. • Metode ini adalah suatu teknik kompresi data secara statistik yang bekerja dengan mereduksi panjang kode rata-rata dan menghasilkan kode prefiks yang digunakan untuk merepresentasikan simbol-simbol dari suatu jenis huruf.

  10. Pohon Huffman • Algoritma Huffman menggunakanstrukturpohondalamprosesnya. • Dalamstrukturpohondikenaldenganterminologiparent (orangtua) danchild (anak). • Parent (orangtua) yaitusebuahsimpul yang memilikilintasankesimpul lain dengantingkatan (level) dibawahnya. • Child (anak) yaitusebuahsimpul yang memilikilintasankesimpul lain dengantingktan (level) diatasnya.

  11. Pohon Huffman (2) • Beradasarkan jumlah anak pohon huffman dikategorikan : • Uner : pohon dengan orang tua yang hanya memiliki satu anak • Biner : pohon dengan orang tua yang memiliki dua anak

  12. Algoritma Huffman • Pengkodean dengan huffman coding menggunakan panjang bit yang bervariasi dalam pengkodean sebuah karakter. • Karakter dengan frekuensi kemunculan lebih besar memiliki panjang bit yang lebih pendek. • Berlaku kebalikannya.

  13. Langkah-langkahAlgoritma Huffman • Hitungstatistik (frekuensi) jumlahkemunculanmasing-masingsimbol. • Simpanhasilinformasibobotmasing-masingsimbol. • Membangunpohonhuffmanberdasarkanlarikbobotdarimasing-masingsimbol. • Konversipohonhuffmanmenjadikodespesifikuntuktiapsimbol.

  14. Contoh • Berikut ini adalah sebuah contoh cara pengkodean sebuah string. Misalkan kita akan mengkodekan sebuah string “AABCABC”. • Dalam kode ASCII string 7 huruf “AABCABC” membutuhkan representasi 7 × 8 bit = 56 bit (7 byte), dengan rincian sebagai berikut: • A = 01000001 • A = 01000001 • B = 01000010 • C = 01000011 • A = 01000001 • B = 01000010 • C = 01000011

  15. PemecahanMasalah • Berdasarkan algoritma yang telah disebutkan sebelumnya, maka kita pertama kali akan menghitung frekuensi kemunculan dari setiap karakater. • String: AABCABC

  16. PemecahanMasalah (2) • Berdasarkan tabel maka dapat disusun model pohon Huffman-nya:

  17. PemecahanMasalah (3) • Berdasarkan pohon Huffman yang ditunjukan pada hasil di atas maka dapat ditentukan kode huffman untuk masing-masing setiap simbol yang dalam string “AABCABC”.

  18. HasilKompresi • Berdasarkan tabel Huffman maka rangkaian bit dari string AABCABC adalah: • 0 0 10 11 0 10 11 • Jadi jumlah bit yang dipakai hanya 11 bit (2 byte), lebih hemat dari jumlah bit sebelumnya (56 bit).

  19. Analisa • Dari Tabel Huffman tampak bahwa kode untuk sebuah simbol/karakter tidak boleh menjadi awalan dari kode simbol yang lain guna menghindari keraguan (ambiguitas) dalam proses dekompresi atau decoding. • Karena tiap kode Huffman yang dihasilkan unik, maka proses dekompresi dapat dilakukan dengan mudah.

  20. Dekompresi Saatmembacakode bit pertamadalamrangkaian bit: 0 0 10 11 0 10 11 yaitu bit 0, dapatlangsungdisimpulkanbahwakode bit “0” merupakanpemetaandarisimbol “A”. Bit keduajuga “A”. Kemudianbacakode bit selanjutnya, yaitu bit “1”, tidakadakode Huffman “1”, lalubacakode Huffman selanjutnyayaitu “0” sehinggamenjadi “10” yaitukarakter “B”. Begituseterusnya…

  21. Huffman Tree • Hitungfrekuensiuntuktiapsimbol. • Urutkandari yang paling kecilke yang paling besar. Setiapsimbolmewakilisatu node. • Tambahkankode ‘0’ untuk node terkecilpertamadan ‘1’ untuk node terkecilkedua. Gabungkankedua node tersebutdanjumlahkankeduafrekuensinya. Makaakandidapat node parent. • Hapuskedua node terkeciltadidaridalam list node, lalumasukkan node parent tadi. • Ulangilangkah ke-2 sampai ke-4 hinggasemuasimbolhabisdibangkitkan.

  22. PenerapanAlgortima Huffman dalam Java • Buatlah kelas-kelas: • Simbol • Node • HuffmanCode

  23. KelasSimbol • Tambahkan atribut char karakter, int frekuensi, String biner. Inisialisasi nilai biner dengan string kosong (“”). Buat setter dan getter-nya. • Buat 3 konstruktor, 1 konstruktor tanpa parameter, 1 konstruktor dengan parameter char karakter dan int frekuensi, 1 konstruktor dengan parameter char karakter, int frekuensi, dan String biner. • Inisialisasi nilai-nilai parameter dari konstruktor di dalam konstruktor.

  24. Kelas Node • Kelas Node adalahturunandarikelasSimbol. • Tambahkan 3 atribut Node left, right, dan parent. Buat setter dan getter-nya. • Buat 3 konstruktor, 1 konstruktortanpa parameter, 1 konstruktordengan parameter Node left dan right, 1 konstruktordengan parameter char karakterdanintfrekuensi. Inisialisasitiapnilaidari parameter. • Untukkonstruktorketiga, inisialisasinilaikelas super denganmenggunakanfungsi setter dan getter darikelas super tersebut

  25. Kelas Node (2) • Didalam fungsi setLeft dan setRight, tambahkan sintaks berikut: • left.setParent(this); (untuk setLeft) • right.setParent(this); (untuk setRight) • Tambahkan fungsi hasChild untuk mengecek apakah node ini memiliki anak atau tidak. • Tambahkan fungsi hasLeft dan hasRight untuk mengecek apakah node ini memiliki anak left atau right.

  26. KelasHuffmanCode • Tambahkan sebuah atribut static Vector<Simbol> listSimbol ke dalamnya, lalu inisialisasi variabel tersebut. • Buat sebuah fungsi static bernama urutSimbol dengan tipe Vector<Node> dan berparameter Vector<Node> listNode. • Tambahkan kode berikut ke dalamnya: for (int i = 0; i < listNode.size() - 1; i++) { Node s = listNode.get(i); for (int j = i + 1; j < listNode.size(); j++) { Node s2 = listNode.get(j); if (s2.getFrekuensi() > s.getFrekuensi()) { Node nB; nB = listNode.get(i); listNode.set(i, listNode.get(j)); listNode.set(j, nB); } } } return listNode;

  27. KelasHuffmanCode (2) • Buat sebuah fungsi static bernama getTopParent dengan tipe Node dan berparameter Vector<Node> listNode, lalu masukkan: Node parent = null; Vector<Node> listBuff = new Vector<Node>(); for (Node node : listNode) { listBuff.add(node); } while (true) { parent = new Node(); parent.setKarakter('p'); listBuff = urutSimbol(listBuff); Node n1 = listBuff.get(listBuff.size() - 1); Node n2 = listBuff.get(listBuff.size() - 2); parent.setFrekuensi(n1.getFrekuensi() + n2.getFrekuensi()); parent.setLeft(n2); parent.setRight(n1); if (listBuff.size() <= 2) { break; } listBuff.removeElementAt(listBuff.size() - 1); listBuff.removeElementAt(listBuff.size() - 1); listBuff.add(parent); } return parent;

  28. KelasHuffmanCode (3) • Buat sebuah fungsi static bernama getCode dengan tipe void dan berparameter Node parent, lalu masukkan: if (parent.hasLeft()) { parent.getLeft().setBiner(parent.getBiner() + "0"); getCode(parent.getLeft()); } if (parent.hasRight()) { parent.getRight().setBiner(parent.getBiner() + "1"); getCode(parent.getRight()); } if (!parent.hasChild()) { listSimbol.add((Simbol) parent); }

  29. KelasHuffmanCode (4) • Buat sebuah fungsi main, lalu masukkan: String txt = "AABCABC"; Vector<Node> listNode = new Vector<Node>(); String buff = txt; while (buff.length() > 0) { char c = buff.charAt(0); int f = 0; String buff2 = ""; for (int j = 0; j < buff.length(); j++) { if (c == buff.charAt(j)) f++; else buff2 += buff.charAt(j); } buff = buff2; listNode.add(new Node(c, f)); } listNode = urutSimbol(listNode); Node topParent = getTopParent(listNode); getCode(topParent); for (Simbol simbol : listSimbol) System.out.println(simbol.getKarakter() + "|" + simbol.getFrekuensi() + "|" + simbol.getBiner());

  30. Tugas • Buat paper tentangalgoritmakompresi: - Lempel-Ziv-Welch (LZW) - Dymanic Markov Compression (DMC) • Jelaskansejarahnya, aturannya, algoritma-nya. • Bericontohpenerapannya: Misaluntukmengkompresi String/kalimat. Beripenjelasanlangkah per langkahuntukkompresidandekompresi-nya. Kumpul hardcopy minggudepansaatkuliah. Dikerjakanmaksimal 2 mahasiswa. Tiapkelompokuntukpenerapan-nyaharusbeda.

  31. Post Test • Sebutkan 3 jenis metode kompresi! • 1 byte berapa bit? • Buatlah tabel Huffman untuk kompresi string ABACCDA (Kerjakan dengan lengkap tahap-tahapnya)! Tulis nama dan NIM.

More Related