37

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

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

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

5 ответов5

75

Все сводится к концепции энтропии. Смотрите Википедию.

Основная идея заключается в том, что, если бы существовала операция сжатия, которая всегда могла сделать файл меньше, то логика подсказывает, что указанная операция сжатия сможет уменьшить любой файл до 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 МБ (что очень много).

7

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

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

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

bzip2, LZMA, LZMA2 и другие алгоритмы, используемые в формате 7z, без потерь. Поэтому будет предел, после которого он больше не сможет сжиматься. Кроме того, исполняемые образы (.exe) обычно представляют собой сильно сжатые файлы. 7zip, как и многие другие инструменты сжатия, встраивает некоторые метаданные, которые фактически могут увеличить размер выходного файла.

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

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

6

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

2

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

В уже сжатых файлах он по-прежнему создает набор символов, но очень мало того, что может уменьшить размер. В вашем случае таблица символов уже сжатого файла, вероятно, находится в районе 2 МБ или даже больше, если ей удалось выполнить некоторое сжатие.

0

сжимающая идея:

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .