About File Compression (Kompresi File)
- Saturday, November 15, 2008, 10:50
- Tips
- 133 views
- Add a comment
Saat Anda men-download program atau file dari Internet, Anda mungkin menemui file dalam bentuk ZIP atau RAR atau jenis kompresi lainnya. Sistem kompresi ini merupakan temuan yang sangat berguna, khususnya bagi pengguna Web karena sistem ini memungkinkan Anda untuk mengurangi jumlah keseluruhan dari bit dan byte dalam sebuah file sehingga file−yang bersangkutan tentu saja−bisa ditransmisikan lebih cepat melalui Internet (jika koneksi Internet Anda lambat, akan lebih efektif men-download file yang terkompresi) atau menghemat space harddisk. Setelah Anda selesai men-download file kompresi itu, Anda akan membutuhkan program seperti WinZip, 7Zip, atau WinRAR untuk meng-extract atau mengembalikan file terkompresi tersebut menjadi seperti semula. Jika tidak terjadi kesalahan, file hasil extract akan sama dengan file asli sebelum di kompresi.
Jika Anda pernah memikirkannya, hal ini akan terasa aneh. Bagaimana bisa jumlah bit dan byte dalam sebuah file atau program dikurangi lalu bit dan byte tadi dapat ditambahkan lagi menjadi sama persis sebelum dikurangi? Sebenarnya, ide di balik sistem kompresi ini cukup mudah. Dalam artikel kali ini, akan kita telusuri metode yang digunakan dalam proses kompresi berikut contohnya.
Sebagian besar atau bahkan semua file komputer mempunyai redundansi−informasi yang sama yang diulang-ulang. Program kompresi mengatasi masalah redundansi ini. Daripada mengulang-ulang setiap informasi yang sama terus-menerus, program kompresi mendaftar informasi−yang ada di file atau program yang dikompresi−sekali saja.
Sebagai contoh, coba perhatikan kata-kata berikut ini.
Dalam sebuah pidatonya pada tahun 1961, John F. Kennedy berkata :
“Ask not what your country can do for you — ask what you can do for your country.”
Kutipan ini mempunyai 17 kata, 61 huruf, 16 spasi, 1 garis, dan 1 titik. Jika setiap huruf membutuhkan satu unit memori dan seluruh spasi dan tanda baca membutuhkan satu unit memori, maka total ukuran file adalah 79 unit. Untuk mengurangi ukuran file, kita harus mencari redundansi yang ada pada file ini.
Perhatikan bahwa :
1.“ask” muncul 2 kali
2.“what” muncul 2 kali
3.“your” muncul 2 kali
4.“country” muncul 2 kali
5.“can” muncul 2 kali
6.“do” muncul 2 kali
7.“for” muncul 2 kali
8.“you” muncul 2 kali
Abaikan perbedaan antara huruf kapital dengan non−kapital, sehingga dapat dilihat hampir semua kata adalah redundan. 9 kata, yaitu ask, not, what, your, country, can, do, for, you, merupakan kata-kata pembentuk seluruh kutipan tersebut. Untuk membentuk kalimat pertama, tinggal gunakan semua kata di atas dan penambahan spasi. Sedangkan untuk kalimat kedua, cukup menunjuk kata yang sama pada kalimat pertama yang dibutuhkan dan menambahkan spasi serta tanda baca.
Sebagian besar program kompresi menggunakan variasi dari algoritma LZ adaptive dictionary-based untuk mengecilkan ukuran file. “LZ” berarti Lempel and Ziv, penemu algoritma ini dan “dictionary” berarti metode mendaftarkan setiap data/ informasi.
Sistem untuk mengurutkan kamus dapat bervariasi, tetapi salah satu cara yang mudah adalah dengan penomoran. Kembali ke contoh, sebelumnya kita telah memilah kata-kata yang berulang dan mengurutkannya. Lalu berdasar algoritma LZ tadi, kita cukup menulis nomor dari kata yang dituju.
Jika gambar di bawah adalah kamus yang kita buat :

Maka, kalimat kita menjadi :

Jika Anda tahu sistemnya, maka akan mudah untuk membangun kembali kalimat asli hanya dengan kamus dan pola nomornya. Inilah yang dilakukan oleh program expansi di komputer Anda saat meng-extract sebuah file. Anda mungkin juga menemukan file kompresi yang dapat meng-extract sendiri. Untuk membuat file kompresi jenis ini, programmer memasukkan program expansi sederhana di dalam file yang dikompressi.
Lalu berapa banyak ruang yang kita hemat dengan sistem kompresi ini? “1 not 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4” sudah jelas lebih pendek dari “Ask not what your country can do for you; ask what you can do for your country.”, tetapi ingat bahwa kita harus menyimpan kamus di dalam file itu sendiri.
Di skema kompresi yang sesungguhnya, menghitung kebutuhan file yang bervariasi akan sangat kompleks. Namun untuk lebih mudahnya, kita gunakan aturan kita sebelumnya, yaitu satu karakter dan satu spasi untuk satu unit memori. Sebelumnya, total memori yang dibutuhkan untuk kalimat utuh adalah 79 unit. Setelah dikompresi, kalimat kita (termasuk spasi) hanya membutuhkan 37 unit dan kamusnya (angka dan huruf) juga membutuhkan 37 unit. Sehingga total file yang kita dapatkan setelah dikompresi adalah 74 unit−ternyata kita belum banyak mengurangi ukuran file.
Namun ini hanya 2 kalimat pendek! Anda bisa bayangkan jika program kompresi mengerjakan sebuah novel−Harry Potter misalnya−pasti akan didapatkan banyak kata yang redundan dan−tentu saja−program kompresi akan bekerja lebih efektif lagi.
Di contoh sebelumnya, kita mengambil semua kata yang redundan dan menaruhnya di dalam sebuah kamus. Bagi kita, itu adalah cara paling umum untuk menulis sebuah kamus. Namun, tidak demikian untuk program kompresi. Program tidak mengenali kata-kata yang terpisah, namun melalui pola. Jadi, untuk mengurangi ukuran file sebanyak mungkin, program kompresi akan memilih pola mana yang akan dimasukkan dalam kamus.
Jika kita menggunakan pendekatan pola untuk contoh sebelumnya, maka akan diperoleh kamus yang benar-benar berbeda.
Jika program kompresi membaca kalimat Kennedy, redundansi pertama hanya ada beberapa huruf saja. Di dalam potongan kalimat “ask not what your”, terdapat pola yang berulang dari huruf “t” diikuti dengan spasi (_) −di dalam kata “not_” dan “what_ ”. Jika program menulis ini dalam kamus, maka program akan menulis “1” setiap kali menemui huruf “t_”. Namun di kalimat yang pendek ini, pola ini tidak cukup atau terlalu sedikit untuk mengurangi ukuran file secara signifikan sehingga program akan menumpuknya denga pola yang lebih banyak terdapat dalam kalimat ini.
Pola selanjutnya yang mungkin ditemukan program adalah “ou”, yang muncul di “your” dan “country”. Pola ini akan lebih efektif jika digunakan untuk kalimat atau dokumen yang lebih panjang−“ou” merupakan kombinasi huruf yang sering digunakan dalam Bahasa Inggris. Namun saat program kompresi mengecek pola “ou” ini, dia akan segera menemukan pola yang lebih efektif lagi untuk masukan kamus : tidak hanya “ou” yang berulang, tetapi seluruh kata “your” dan “country” juga berulang seluruhnya. Bahkan kedua kata ini juga berulang secara bersama dan berurutan menjadi gabungan kata “your country”. Oleh sebab ini, program akan menumpuk masukan kamus “ou” dengan “your country”.
Gabungan kata “can do for” juga berulang, satu diikuti dengan “your” dan satu lagi diikuti dengan “you”, sehingga didapat pola berulang “can do for you”. Hal ini memungkinkan ditulisnya 15 karakter (termasuk spasi) dengan nilai satu angka, sementara pola “your country” hanya memungkinkan ditulisnya 13 karakter (termasuk spasi) dengan nilai satu angka, sehingga program akan menumpuk masukan kamus dari gabungan kata “your country” dengan “r country” dan menulis masukan berbeda untuk “can do for you”. Jadi program kompresi bekerja seperti ini : program mengambil bit-bit yang berulang dari informasi yang bersangkutan dan menghitung pola mana yang akan dimasukkan dalam kamus. Kemampuan program untuk menulis atau menumpun masukan yang ada didalam kamus inilah yang disebut “adaptive” yang merupakan bagian dari algoritma LZ adaptive dictionary-based.
Dengan sistem pencarian yang lebih dalam ini memungkinkan Anda meng-kompres file dengan lebih efisien daripada hanya sekedar pemilihan kata-kata. Dengan pola yang telah kita dapatkan dari kalimat Kennedy dan penambahan “_” untuk spasi, kita dapatkan kamus seperti berikut :

Sehingga kalimat yang kita dapatkan adalah sebagai berikut :

Kalimat itu hanya membutuhkan 18 unit memori dan kamus hanya butuh 41 unit. Sehingga sekarang kita meng-kompres file total sebesar 79 unit menjadi 59 unit! Ini adalah salah satu cara untuk meng-kompres kalimat.
Jadi, seberapa efektifkah sebuah sistem kompresi? File-reduction ratio atau rasio pengurangan file bergantung pada beberapa faktor, yaitu tipe file, ukuran file, dan skema kompresi.
Di sebagian besar bahasa di dunia, huruf-huruf atau kata-kata tertentu sering muncul bersamaan dalam pola yang sama. Karena kemungkinan redundan yang tinggi ini, file teks di-kompres sangat baik. Pengurangan sebesar 50 persen atau lebih biasa terjadi pada file teks yang tertata dengan baik. Begitu juga dengan bahasa pemrograman karena umumnya menggunakan koleksi perintah yang sering digunakan dalam pola tertentu sehingga kemungkinan redundan pun tinggi. Sedangkan file yang mempunyai banyak informasi unik seperti grafik atau mp3 tidak dapat di-kompres terlalu banyak dengan sistem ini karena perulangan pola jarang ditemui.
Jika sebuah file memiliki banyak pola yang berulang, tingkat pengurangan umumnya berbanding lurus dengan ukuran file itu sendiri. Anda bisa membuktikan sendiri kalimat ini dengan memperhatikan contoh kita sebelumnya−jika kita mencoba meng-kompres pidato Kennedy seluruhnya, kita dapat menggunakan masukan-masukan dalam kamus kita lebih sering untuk mengecek setiap huruf ataupun kata pada pidato Kennedy secara keseluruhan. Selain itu, kita akan menemui pola-pola yang semakin banyak yang muncul di dokumen yang panjang, sehingga masukan kamus yang kita dapat akan lebih efisien. Jadi, semakin banyak pola serta masukan kamus yang kita dapat, akan semakin efisien sistem kompresi kita.
Efisiensi juga bergantung pada algoritma spesifik yang digunakan oleh program kompresi yang bersangkutan. Beberapa program ada yang khusus untuk mengenali pola pada tipe file tertentu sehingga dapat meng-kompres lebih ringkas. Ada pula yang mempunyai kamus di dalam kamus, sehingga memungkinkan meng-kompres lebih efisien untuk file dengan ukuran besar tetapi tidak untuk file dengan ukuran kecil. Namun, sebagian besar program kompresi mempunyai ide dasar sistem kompresi yang sama.
Jenis kompresi yang kita bahas sebelumnya disebut dengan lossless compression. Disebut demikian karena kompresi jenis ini memungkinkan untuk mengembalikan file asli persis seperti sebelum di-kompres. Ide dasar dari lossless compression adalah memecah file menjadi bentuk yang lebih kecil−agar lebih cepat untuk dikirim atau penghematan tempat−dan menyatukan kembali file tersebut sehingga dapat digunakan lagi.
Lossy compression bekerja sangat berbeda. Program jenis ini akan menghapuskan bit-bit yang “tidak penting” dari informasi yang ada, sehingga mengecilkan ukuran file. Jenis kompresi ini digunakan kebanyakan untuk mengurangi ukuran file tipe bitmap yang cenderung besar. Untuk mengetahui bagaimana kerja kompresi jenis ini, dapat dicontohkan dengan cara komputer meng-kompres foto hasil scan.
Meskipun ada bagian dari foto yang terlihat sama−warna langit yang seluruhnya biru, contohnya−tetapi sebenarnya antarpixel berbeda warna sedikit. Untuk membuat ukuran foto berkurang tanpa memikirkan resolusinya, Anda harus mengubah nilai warna untuk pixel-pixel tertentu. Jika foto memiliki banyak warna biru langit, program akan memilih warna biru yang akan digunakan untuk menumpuk pixel warna biru lainnya yang agak berbeda. Lalu program akan menulis ulang file foto tersebut sehingga semua nilai dari setiap pixel langit menunjuk kembali pada informasinya. Jika skema kompresi bekerja dengan baik, Anda mungkin tidak menyadari perbedaannya tetapi ukuran file akan berubah (baca : berkurang).
Namun dengan sistem lossy compression, Anda tidak akan dapat mengembalikannya kembali ke file aslinya setelah di-kompres. Oleh karena itu, Anda tidak disarankan untuk menggunakan kompresi jenis ini untuk meng-kompresi file yang harus dapat dikembalikan seperti semula, seperti software aplikasi, database, atau Pidato Pembukaan Presiden
Sumber : How Stuff Works
About the Author
Write a Comment
Gravatars are small images that can show your personality. You can get your gravatar for free today!