Lempel-Ziv-Markov Chain Algorithm LZMA

compression disebut juga irreversible compression karena data asli mustahil untuk dikembalikan seperti semula. Kelebihan teknik ini adalah rasio kompresi yang tinggi dibanding metode lossless. Keuntungan dari metode lossy atas lossless adalah dalam beberapa kasus metode lossy menghasilkan file kompresi yang lebih kecil dibandingkan dengan metode lossless. Metode lossy sering digunakan untuk mengkompresi suara, gambar dan video karena data tersebut dimaksudkan kepada human interpretation dimana pikiran dapat dengan mudah “mengisi bagian-bagian yang kosong” atau melihat kesalahan yang sangat kecil atau inkonsistensi. Sedangkan lossless digunakan untuk mengkompresi data untuk diterima ditujuan dalam kondisi asli seperti dokumen teks. Lossy akan mengalami generation loss pada data sedangkan pada lossless tidak terjadi karena data yang hasil dekompresi sama dengan data asli. [4]

2.6. Lempel-Ziv-Markov Chain Algorithm LZMA

LZMA merupakan algoritma yang telah dikembangkan sejak 1998. Pertama kali diperkenalkan dan digunakan oleh software kompresi terpopuler yaitu 7z atau 7-zip yang diciptakan oleh Igor Pavlov. Prinsip dasar dari algoritma LZMA sama dengan LZ77, hanya saja LZMA telah mengalami perkembangan pada beberapa fitur, diantaranya adalah ditingkatkannya rasio kompresi, semakin besarnya ukuran dari dictionary yang digunakan pada proses kompresi. LZMA juga dikembangkan kedalam bentuk modul berbasis Python. Modul tersebut bernama pylzma. Pylzma dapat dijalankan pada OS Windows, Linux, dan OSX. [3] LZMA adalah algoritma yang digunakan untuk kompresi data dengan menggunakan sebuah skema dictionary compression, yang hampir sama dengan LZ77, dan mampu menghasilkan rasio kompresi yang sangat baik. Pada kompresi LZMA, stream kompresi yang dihasilkan adalah stream dari bit yang di-encode menggunakan adaptive binary range encode. Stream dibagi kedalam paket. Setiap paket menjelaskan sebuah byte tunggal, atau sebuah urutan LZ77 dimana length dan distance-nya secara implisit atau eksplisit dikodekan. [1] Contoh Proses Encoding dan Decoding menggunakan LZMA adalah sebagai berikut: Misal kita memiliki string: ABAABAAABBBAABBABBBBAB Kita mulai dari string paling kiri yaitu A A | BAABAAABBBAABBABBBBAB Selanjutnya kita melihat frasa berikutnya yang belum ditemukan. Sebelumnya A. Maka selanjutnya B A | B | AABAAABBBAABBABBBBAB Frasa selanjutnya yang belum ditemukan adalah AA maka string yang kita miliki menjadi : A | B | AA | BAAABBBAABBABBBBAB Frasa selanjutnya yang belum ditemukan adalah BA maka string yang kita miliki menjadi : A | B | AA | BA | AABBBAABBABBBBAB Frasa selanjutnya yang belum ditemukan adalah AAB maka string yang kita miliki menjadi : A | B | AA | BA | AAB | BBAABBABBBBAB Frasa selanjutnya yang belum ditemukan adalah BB maka string yang kita miliki menjadi : A | B | AA | BA | AAB | BB | AABBABBBBAB Frasa selanjutnya yang belum ditemukan adalah AABB maka string yang kita miliki menjadi : A | B | AA | BA | AAB | BB | AABB | ABBBBAB Frasa selanjutnya yang belum ditemukan adalah AB maka string yang kita miliki menjadi : A | B | AA | BA | AAB | BB | AABB | AB | BBBAB Frasa selanjutnya yang belum ditemukan adalah BBB maka string yang kita miliki menjadi : A | B | AA | BA | AAB | BB | AABB | AB | BBB | AB Frasa terakhir dan telah berulang adalah AB maka string yang kita miliki menjadi : A | B | AA | BA | AAB | BB | AABB | AB | BBB | AB Karena semua huruf sudah habis maka frasa terakhir akan berulang, yaitu AB yang sebelumnya kita sudah temukan dan tidak menjadi masalah. Proses Encoding LZMA adalah sebagai berikut: Untuk melakukan encoding terhadap string diatas, setiap frase yang kita temukan kita jadikan dictionary. Jadi untuk frasa selanjutnya kita tidak perlu menuliskan semua frasa tapi cukup dengan menuliskan nomor dari dictionary-nya. Seperti berikut ini : 1 2 3 4 5 6 7 8 9 10  Nomor Dictionary A B AA BA AAB BB AABB AB BBB AB  Proses Decoding 0A 0B 1A 2A 3B 2B 5B 1B 6B 8  Hasil Encoding Baris ketiga merupakan hasil encoding dari string diatasnya. Bisa kita lihat bahwa untuk meng-encoding frasa ke 7 AABB kita cukup dengan menuliskan 5B. Nilai 0 merupakan frasa ke 0 yang akan di encoding sebagai 0. Ukuran Sebelum Kompresi = 22 String Ukuran Setelah Kompresi = 10 String Rasio Pemampatan = 100 x 100 = 100 - 45,455 = 54,545, artinya 54,455 dari string semula telah dimampatkan.

2.7. Run Length Encoding