Kemungkinan Duplikat:
Mengapa Kompresi ZIP tidak memampatkan sesuatu?
Saya mencoba 7zipping file .exe tetapi sebenarnya menjadi lebih besar.
Apakah ini hasil yang diharapkan?
compression
zip
7-zip
IMB
sumber
sumber
Jawaban:
Turun ke konsep yang disebut entropi . Lihat Wikipedia .
Ide dasarnya adalah bahwa, jika ada operasi kompresi yang selalu dapat membuat file lebih kecil, maka logika menentukan bahwa operasi kompresi akan dapat mengurangi file apa pun menjadi 0 byte dan masih mempertahankan semua data. Tetapi ini tidak masuk akal , karena kita tahu bahwa 0 byte tidak dapat menyampaikan informasi sama sekali. Jadi kami baru saja membuktikan bahwa tidak ada algoritma kompresi yang selalu membuat inputnya lebih kecil, karena jika itu masalahnya, informasi apa pun dapat disimpan dalam 0 byte - tetapi 0 byte menyiratkan tidak adanya informasi, sehingga Anda dapat ' t secara bersamaan tidak memiliki informasi dan semua informasi. Karenanya, itu tidak masuk akal.
Karena konsep teoretis ini, setiap program kompresi yang pernah Anda gunakan akan menambah ukuran (atau paling banter, mempertahankan ukuran yang sama) dari beberapa input. Artinya, untuk algoritma kompresi apa pun yang Anda desain atau gunakan, akan ada input tertentu yang akan keluar lebih kecil, dan beberapa yang tidak.
Data yang sudah dikompres umumnya merupakan kandidat yang mengerikan untuk kompresi lebih lanjut, karena kebanyakan algoritma kompresi lossless didasarkan pada prinsip-prinsip teoretis yang sama. Hal ini dimungkinkan untuk kompres data buruk-dikompresi lebih jauh; tetapi ini kurang efisien daripada hanya mengompresnya dengan algoritma terbaik yang tersedia dari data asli untuk memulai.
Misalnya, jika Anda memiliki file teks 100 MB dan kompres dengan menggunakan algoritma Zip biasa, mungkin akan dikompresi hingga 50 MB. Jika Anda kemudian mengompres file Zip dengan LZMA2, Anda mungkin mendapatkannya hingga 40 atau 45 MB, karena LZMA memiliki rasio kompresi yang lebih tinggi untuk sebagian besar data kompresibel daripada Zip. Jadi masuk akal bahwa itu juga dapat mengompresi data Zip, karena Zip tidak sepenuhnya menyedot semua entropi dari itu. Tetapi jika Anda menghilangkan wadah Zip sepenuhnya, Anda mungkin bisa membuatnya lebih kecil dengan mengompresi teks mentah dengan LZMA2, berpotensi menghasilkan sesuatu pada urutan 30 - 35 MB (ini hanya "nomor udara" untuk menggambarkan konsep) .
Dalam kasus biner yang Anda coba kompres, ini lebih besar karena format file 7-Zip harus membuat struktur internal sendiri dan mengemas data yang dapat dieksekusi yang sudah dikompresi ke dalam format 7-Zip. Ini berisi hal-hal seperti kamus, header file, dan sebagainya. Data tambahan ini biasanya lebih dari diimbangi dengan penghematan mengompresi data itu sendiri, tetapi tampaknya executable yang Anda coba kompres sudah dikompres dengan beberapa bentuk LZMA; jika tidak, kemungkinan akan mengecilkan ukuran executable atau sangat sedikit meningkatkannya, daripada meningkatkannya sebesar 2 MB (yang banyak).
sumber
2^(n+1)-1
kemungkinan pesan berukuran n-bit atau kurang. Algoritme kami harus memetakan masing-masing ke output yang unik . Jika salah satu dari ini dipetakan ke nilai dengan bit lebih sedikit, nilai lain harus dipetakan ke nilai lebih.Algoritma kompresi yang mendasari digunakan dalam 7z adalah lossless . Yang berarti Anda dapat mengompres-ulang file berulang kali secara berulang. Selanjutnya, setelah setiap iterasi file akan tetap sama persis .
Sayangnya, Anda tidak dapat mengharapkan algoritma kompresi lossless diterapkan berkali-kali dengan selalu hasil positif. Ada batasan ketat yang tidak bisa dilompati. Secara kasar, batas ini tergantung pada seberapa dekat urutan input mengemas data acak. Di atas semua itu, algoritma lossless digunakan untuk kompresi file, transfer data HTML Internet, backup, dan operasi lain yang mengharapkan file output didekompresi menjadi file input asli yang sama persis.
Berbeda dengan kompresi lossless , Anda mungkin selalu mengharapkan penurunan ukuran file setelah kompresi dengan algoritma kompresi lossful (atau lossy) . Sisi bawah adalah bahwa Anda tidak dapat persis mengembalikan file asli setelah kompres-dekompresi iterasi tunggal. Algoritma ini paling terkenal untuk transmisi dan penyimpanan audio / video / gambar.
bzip2 , LZMA , LZMA2 dan algoritma lain yang digunakan oleh format 7z semuanya lossless . Karena itu akan ada batas setelah itu tidak bisa lagi dikompres. Selain itu, gambar yang dapat dieksekusi (.exe) biasanya merupakan file yang sangat terkompresi. 7zip karena banyak alat kompresi lainnya menanamkan beberapa metadata, yang pada kenyataannya dapat membuat file output lebih besar.
Brain teaser: bagaimana jika kita memang memiliki algoritma lossless yang selalu dapat mengurangi ukuran file?
Dalam hal ini, Anda akan selalu melihat bahwa file terkompresi lebih kecil dari file input. Lihat komentar di bawah mengapa itu tidak mungkin.
sumber
Jika executable asli sudah dikompresi (atau berisi data yang sangat terkompresi atau data yang tidak dapat dikompres) maka mengompresnya akan menambah ukuran.
sumber
Kebanyakan algoritma kompresi menggunakan apa yang disebut tabel simbol, pada dasarnya hanya bagian dari file yang digunakannya sebagai elemen yang BISA dikompres. Ini, tentu saja, membuat beberapa overhead dalam file tetapi biasanya menghasilkan file yang jauh lebih kecil.
Dalam file yang sudah dikompresi, masih membuat satu set simbol, tetapi ada sangat sedikit yang dapat mengurangi ukurannya. Dalam kasus Anda, tabel simbol dari file yang sudah dikompresi mungkin berada di sekitar 2 MB atau mungkin lebih jika berhasil melakukan kompresi.
sumber
ide kompresi:
perangkat lunak kompresi membuat daftar file dan menghilangkan konten duplikat.
saat mengompresi file yang sudah dikompresi, Anda mungkin mendapatkan file yang dikompresi lebih besar dari aslinya.
sumber