Можливий повтор:
Чому ZIP Compression нічого не стискає?
Я спробував 7zipping an .exe файл, але він фактично став більшим.
Це очікуваний результат?
Можливий повтор:
Чому ZIP Compression нічого не стискає?
Я спробував 7zipping an .exe файл, але він фактично став більшим.
Це очікуваний результат?
Відповіді:
Це зводиться до поняття, яке називається ентропія . Дивіться Вікіпедію .
Основна ідея полягає в тому, що якби існувала операція стиснення, яка завжди могла б зменшити файл, то логіка диктує, що зазначена операція стиснення зможе зменшити будь-який файл до 0 байт і все-таки зберегти всі дані. Але це абсурдно , адже ми знаємо, що 0 байтів взагалі не можуть передати будь-яку інформацію. Тож ми тільки що довели, що не може існувати алгоритм стиснення, який завжди робить його введення меншим, оскільки якби це було так, будь-яка інформація могла б зберігатися в 0 байтах, але 0 байт означає відсутність інформації, тож ви можете ' t одночасно не мають інформації і всієї інформації. Значить, це абсурд.
Завдяки цій теоретичній концепції кожна програма стиснення, яку ви коли-небудь використовуєте, збільшить розмір (або в кращому випадку - підтримує однаковий розмір) деякого вводу. Тобто, для будь-якого алгоритму стиснення, який ви розробляєте або використовуєте, будуть певні входи, які вийдуть меншими, а деякі - ні.
Вже стислі дані, як правило, є жахливим кандидатом для подальшого стиснення, оскільки більшість алгоритмів стиснення без втрат базуються на тих же теоретичних принципах. Можливо ще більше стиснути дані, що погано стискаються; але це менш ефективно, ніж просто стиснути його за найкращим доступним алгоритмом, починаючи з початкових даних.
Наприклад, якщо у вас був текстовий файл розміром 100 Мб і стискали його за допомогою звичайного алгоритму Zip, він може стискатися до 50 Мб. Якщо потім стиснути Zip-файл за допомогою LZMA2, ви можете зменшити його до 40 або 45 Мб, оскільки LZMA має високий коефіцієнт стиснення для більшості стисливих даних, ніж Zip. Тому, очевидно, він може також стискати дані Zip, оскільки Zip повністю не висмоктує всю ентропію з них. Але якщо ви повністю усунете контейнер Zip, можливо, ви зможете отримати його ще менше, стиснувши сирий текст за допомогою LZMA2, потенційно отримавши щось на порядку 30 - 35 Мб (це лише "повітряні номери" для ілюстрації концепції) .
У випадку цього бінарного файлу, який ви намагаєтесь стиснути, він більший, оскільки формат файлу 7-Zip повинен створити власну внутрішню структуру та упакувати дані вже стислих виконуваних даних у формат 7-Zip. Тут містяться такі речі, як словник, заголовок файлу тощо. Ці додаткові дані, як правило, більше ніж компенсуються економією від стиснення самих даних, але виявляється, що виконуваний файл, який ви намагаєтесь стиснути, вже стиснутий певною формою LZMA; інакше, швидше за все, зменшиться розмір виконуваного файлу або дуже незначно збільшить його, а не збільшить його на 2 Мб (що багато).
2^(n+1)-1
можливі повідомлення розміру N-біти або менше. Наш алгоритм повинен відображати кожен з них до унікального результату. Якщо навіть один із них відображається на значення з меншою кількістю бітів, інше значення обов'язково має бути відображене на одне з більшою кількістю.
Базові алгоритми стиснення, що використовуються в 7z, не мають втрат . Це означає, що ви можете ітеративно стискати-розпаковувати файл багато разів. Крім того, після кожної ітерації файл залишатиметься точно однаковим.
На жаль, не можна очікувати, що алгоритм стиснення без втрат застосовується багато разів, завжди з позитивним результатом. Існує сувора межа, яку вона не може перейти. Приблизно цей кордон залежить від того, наскільки тісно послідовність введення об'єднує випадкові дані. Перш за все, алгоритми без втрат використовуються для стиснення файлів, передачі HTML в Інтернеті, резервного копіювання та інших операцій, які передбачають, що вихідний файл буде декомпресований в точно такий же вихідний вхідний файл.
На відміну від стиснення без втрат , ви завжди можете очікувати зменшення розміру файлу після стиснення за допомогою втрачених (або втрачених) алгоритмів стиснення . Нижня сторона полягає в тому, що ви не можете точно відновити оригінальний файл після однієї компресії-декомпресії ітерації. Ці алгоритми найвідоміші для передачі та зберігання аудіо / відео / зображення.
bzip2 , LZMA , LZMA2 та інші алгоритми, які використовуються у форматі 7z , без втрат . Тому буде межа, після якої вона вже не може стискатися. Крім цього, виконувані зображення (.exe) - це зазвичай дуже стислі файли. 7zip як і багато інших інструментів стиснення, вбудовує деякі метадані, які насправді можуть збільшити вихідний файл.
У цьому випадку ви завжди бачите, що стислий файл менший за вхідний файл. Дивіться коментар нижче, чому це неможливо.
Більшість алгоритмів стиснення використовують те, що називається символьною таблицею, в основному це песики файлу, який він використовує як елементи, які МОЖЕ стиснути. Це, звичайно, створює певні накладні витрати у файлі, але зазвичай призводить до набагато менших файлів.
У вже стислих файлах він все ще створює набір символів, але їх дуже мало. У вашому випадку таблиця символів вже стисненого файлу, ймовірно, знаходиться близько 2 Мб або, мабуть, більше, якщо йому вдалося зробити деяке стиснення.