Mengapa Kompresi ZIP tidak memampatkan sesuatu?

18

Direktori 398MB hanya dikompresi menjadi 393MB menggunakan 7Z dan kompresi ZIP Normal. Apakah ini normal? Jika demikian, mengapa orang terus menggunakan ZIP di Windows?

Thomas Owens
sumber

Jawaban:

70

Jika Anda mengompresi hal-hal yang sudah dikompresi (AVI, JPEG, MP3), Anda tidak akan mendapatkan banyak selain mengemas semuanya dalam satu file.

Chris Karcher
sumber
1
Dan saya bahkan telah melihatnya beroperasi secara terbalik menyebabkan arsip terkompresi menjadi lebih besar daripada file terkompresi individu.
Fiasco Labs
32

Kompresi bekerja dengan mencari pola berulang di dalam item untuk dikompres. Juga karena Anda tidak ingin kehilangan data apa pun saat mengompresi file Anda, kompresinya harus lossless (*).
Sekarang dengan itu di belakang di kepala Anda, pikirkan tentang cara file (item) disimpan di komputer. Pada level terendah, mereka semua hanya sekelompok 0 dan 1.

Pertanyaannya dengan demikian dapat diubah menjadi: " Bagaimana saya bisa mewakili sekelompok 1 dan 0 dengan cara yang lebih kompak daripada representasi asli? "

Jadi mari kita mulai dari awal, bagaimana Anda bisa memadatkannya representasi normal dari satu bit (satu 1 atau 0 tunggal)?
Jawabannya sangat mudah: Anda tidak bisa! ... sedikit saja direpresentasikan dengan cara yang paling ringkas.

Cukup adil, mari kita ambil contoh yang lebih besar, bagaimana Anda mengompres string biner seperti 0111 0111 0100 0111 ?
Yah karena kita sudah tahu bahwa melihat bit individual tidak akan membantu kita sama sekali, kita tahu bahwa kita harus melihat skala yang lebih besar. Sebagai contoh, mari kita ambil 4 bit sekaligus. Kita sekarang melihat bahwa string biner "0111" akan muncul 3 kali dalam contoh, jadi mengapa kita tidak menyatakannya dengan bit tunggal: 0? tetapi ini masih menyisakan 0100 dalam kegelapan, jadi mari kita nyatakan bahwa dengan "1"
Kita tahu telah mengompresi aslinya menjadi: "0010"

Bagus sekali! Namun ini hanyalah dasar dari dasar - dasar "algoritma pengodean Huffman" , dan di dunia nyata itu akan menjadi sedikit lebih rumit dari itu (dan Anda juga perlu menyimpan tabel dengan informasi pengkodean di dalamnya, tetapi itu adalah sedikit jauh untuk menjawab pertanyaan ini).

Sekarang untuk benar benar menjawab pertanyaan Anda: mengapa semua data tidak dapat dikompresi dengan baik?, Mari kita ambil contoh lain: "0001 0110 1000 1111", jika kita menggunakan teknik yang sama seperti di atas kita tidak akan dapat mengompres data (tidak ada pengulangan ditemukan), dan dengan demikian tidak akan mendapat manfaat dari kompresi ...


(*) tentu saja ada pengecualian untuk ini. Contoh paling dikenal dari ini adalah kompresi yang digunakan untuk file MP3. di sini beberapa informasi tentang suara akan hilang saat mengonversinya dari file asli, asli, ke format MP3, kompresi ini jadi hilang . Contoh lain adalah format .JPG untuk gambar

sven
sumber
6

Proses mengompresi mengambil pola berulang dan tokenizes mereka ke pola yang lebih pendek. Outputnya sebagian besar tidak dapat diulang dan karenanya tidak dapat dikompresi oleh banyak, jika sama sekali.

spoulson
sumber
6

Dari bagian Keterbatasan artikel Wikipedia tentang Kompresi Lossless :

Algoritma kompresi data lossless tidak dapat menjamin kompresi untuk semua set data input. Dengan kata lain, untuk algoritma kompresi data (lossless), akan ada set data input yang tidak menjadi lebih kecil saat diproses oleh algoritma. Ini mudah dibuktikan dengan matematika dasar menggunakan argumen penghitungan. ...

Pada dasarnya, secara teori tidak mungkin untuk mengompres semua data input yang mungkin hilang.

Jared Updike
sumber
Lebih sulit untuk mengompres data yang sudah dikompres. Gambar, video sebagian besar dikompresi karena ukuran aslinya akan sangat besar
phuclv
4

Apakah ini normal?

Tidak. Tidak dengan file "normal". File apa yang Anda kompres? Jika sudah dikompresi, misalnya JPG, GIF, PNG, video, atau bahkan file zip lainnya, maka file tersebut tidak akan banyak dikompres dengan algoritma apa pun. Jika Anda mencoba mengompresi file Teks, XML, BMP terkompresi, kode sumber dll., Zip akan memberikan kompresi yang baik, tetapi mungkin bukan yang terbaik.

Mengapa orang terus menggunakan ZIP di Windows?

Salah satu alasannya adalah bahwa ada penanganan zip yang bagus di dalam sistem - Anda dapat mengklik kanan di mana saja dan membuat file zip baru, lalu memasukkan barang ke dalamnya. Anda cukup mengklik dua kali file zip dan terbuka seperti folder. Anda dapat menyalin barang dari itu dan kadang-kadang bahkan menggunakannya di tempat. Anda tidak perlu menginstal WinZip atau 7z atau program lainnya. Saya biasanya merekomendasikan orang tidak.

rjmunro
sumber
2

Dalam arsip zip yang berisi banyak file, setiap file dikompresi secara independen. Jika ada banyak kesamaan antara file, maka alat yang berbeda mungkin memberikan kompresi yang lebih baik.

Misalnya, tar.gz menggabungkan file-file tersebut bersama-sama, lalu mengompres hasilnya. Demikian juga file rar "solid" menggunakan kesamaan antara file.

Kelemahan dari tar.gz atau rar padat adalah bahwa Anda tidak dapat lagi mengekstrak satu file dari arsip besar tanpa mendekompres arsip ke tempat file yang Anda inginkan.

Stephen Denne
sumber