Почему файл 7zip больше, чем файл raw?

Почему файл 7zip больше, чем файл raw?

Возможный дубликат:
Почему ZIP-сжатие ничего не сжимает?

Я попробовал сжать .exe-файл с помощью 7zip, но он даже стал больше.

введите описание изображения здесь

Это ожидаемый результат?

решение1

Это сводится к концепции, называемойэнтропия. ВидетьВикипедия.

Основная идея заключается в том, что если бы существовала операция сжатия, которая могла бывсегдасделать файл меньше, то логика подсказывает, что эта операция сжатия сможет уменьшить любой файл до 0 байт и все равно сохранить все данные. Но этоабсурдный, потому что мы знаем, что 0 байтов не могут передать никакой информации вообще. Так что мы только что доказали, что естьне может существоватьалгоритм сжатия, который всегда уменьшает размер входных данных, поскольку если бы это было так, то любая информация могла бы храниться в 0 байтах, но 0 байтов подразумевает, чтоотсутствиеинформации, поэтому вы не можете одновременно иметьнетинформация ивсеинформация. Следовательно, это абсурд.

Из-за этой теоретической концепции каждая программа сжатия, которую вы когда-либо будете использовать, будетувеличивать размер (или в лучшем случае сохранить тот же размер)некоторыйвходные данные. То есть для любого алгоритма сжатия, который вы разрабатываете или используете, будут определенные входные данные, которые будут меньше, а некоторые — нет.

Уже сжатые данные, как правило, являются ужасным кандидатом для дальнейшего сжатия, поскольку большинство алгоритмов сжатия без потерь основаны на тех же теоретических принципах. ЭтоявляетсяПлохо сжатые данные можно сжать еще сильнее, но это менее эффективно, чем просто сжать их с помощью наилучшего из доступных алгоритмов, взятых из исходных данных.

Например, если у вас есть текстовый файл размером 100 МБ и вы сжимаете его с помощью обычного алгоритма Zip, он может сжаться до 50 МБ. Если вы затем сожмете файл Zip с помощью LZMA2, вы можете уменьшить его до 40 или 45 МБ, потому что LZMA имеетболее высокая степень сжатиядля большинства сжимаемых данных, чем Zip. Поэтому вполне логично, что он также может сжимать данные Zip, поскольку Zip не полностью высасывает из них всю энтропию. Но если полностью исключить контейнер Zip, то можно сделать его еще меньше, сжав необработанный текст с помощью LZMA2, что потенциально даст что-то порядка 30–35 МБ (это просто «воздушные цифры», иллюстрирующие концепцию).

В случае с тем двоичным файлом, который вы пытаетесь сжать, этобольшепотому что формат файла 7-Zip должен создать свою собственную внутреннюю структуру и упаковать уже сжатые данные исполняемого файла в формат 7-Zip. Он содержит такие вещи, как словарь, заголовок файла и т. д. Эти дополнительные данные обычно более чем компенсируются экономией от сжатия самих данных, но, похоже, исполняемый файл, который вы пытаетесь сжать, уже сжат с помощью какой-то формы LZMA; в противном случае он, скорее всего, уменьшит размер исполняемого файла или совсем немного увеличит его, а не увеличит на 2 МБ (что много).

решение2

Базовые алгоритмы сжатия, используемые в 7z:без потерь. Это означает, что вы можете многократно итеративно сжимать-распаковывать файл. Более того, после каждой итерации файл останетсяточноодинаковый.

К сожалению, вы не можете ожидатьбез потерьалгоритм сжатия может быть применен много раз с всегда положительным результатом. Существует строгая граница, которую он не может перепрыгнуть. Грубо говоря, эта граница зависит от того, насколько близко входная последовательность объединяет случайные данные. Прежде всего, алгоритмы без потерь используются для сжатия файлов, передачи данных HTML через Интернет, резервного копирования и других операций, которые ожидают, что выходной файл будет распакован в точно такой же исходный входной файл.

В отличие отбез потерьсжатие, вы всегда можете ожидать уменьшения размера файла после сжатия с помощьюалгоритмы сжатия с потерями (или с потерями). Недостатком является то, что вы не можететочновосстановить исходный файл после одной итерации сжатия-распаковки. Эти алгоритмы наиболее известны для передачи и хранения аудио/видео/изображений.

bzip2,ЛЗМА,ЛЗМА2и другие алгоритмы, используемыеформат всебез потерь. Поэтому будет предел, после которого он больше не сможет сжиматься. Вдобавок ко всему, исполняемые образы (.exe) обычно являются сильно сжатыми файлами.7zipкак и многие другие инструменты сжатия, встраивает некоторые метаданные, которые фактически могут увеличить размер выходного файла.

Головоломка: что, если бы у нас был алгоритм без потерь, который всегда мог бы уменьшить размер файла?

В этом случае вы всегда увидите, что сжатый файл меньше входного файла. Смотрите комментарий ниже, почему это невозможно.

решение3

Если исходный исполняемый файл уже был сжат (или содержал сильно сжатые или несжимаемые данные), то сжатие приведет к увеличению размера.

решение4

идея сжатия:

Программа сжатия создает список файлов и удаляет дублирующийся контент.

при сжатии уже сжатых файлов размер сжатых файлов может оказаться больше исходного.

Связанный контент