Возможное дублирование:
почему ZIP Compression ничего не сжимает?
Я попробовал 7zip .exe файл, но на самом деле он стал больше.
Это ожидаемый результат?
Возможное дублирование:
почему ZIP Compression ничего не сжимает?
Я попробовал 7zip .exe файл, но на самом деле он стал больше.
Это ожидаемый результат?
Ответы:
Все сводится к концепции энтропии . Смотрите Википедию .
Основная идея заключается в том, что если бы существовала операция сжатия, которая всегда могла сделать файл меньше, то логика подсказывает, что указанная операция сжатия сможет уменьшить любой файл до 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^(n+1)-1
возможные сообщения размера N-биты или меньше. Наш алгоритм должен отобразить каждый из них на уникальный результат. Если хотя бы один из них сопоставлен со значением с меньшим количеством битов, другое значение обязательно должно быть сопоставлено со значением с большим количеством.
Базовые алгоритмы сжатия, используемые в 7z, без потерь . Это означает, что вы можете многократно сжимать-распаковывать файл много раз. Кроме того, после каждой итерации файл останется точно таким же.
К сожалению, вы не можете ожидать, что алгоритм сжатия без потерь будет применяться много раз с всегда положительным результатом. Существует строгая граница, которую он не может перепрыгнуть. Грубо говоря, эта граница зависит от того, насколько близко входная последовательность объединяет случайные данные. Прежде всего, алгоритмы без потерь используются для сжатия файлов, передачи данных HTML в Интернете, резервного копирования и других операций, которые ожидают, что выходной файл будет распакован точно в тот же исходный входной файл.
В отличие от сжатия без потерь, вы всегда можете ожидать уменьшения размера файла после сжатия с помощью алгоритмов сжатия с потерями (или с потерями) . Недостатком является то, что вы не можете точно восстановить исходный файл после одной итерации сжатия-распаковки. Эти алгоритмы наиболее известны для передачи и хранения аудио / видео / изображений.
bzip2 , LZMA , LZMA2 и другие алгоритмы, используемые в формате 7z , без потерь . Поэтому будет предел, после которого он больше не сможет сжиматься. Кроме того, исполняемые образы (.exe) обычно представляют собой сильно сжатые файлы. 7zip, как и многие другие инструменты сжатия, встраивает некоторые метаданные, которые фактически могут увеличить размер выходного файла.
В этом случае вы всегда увидите, что сжатый файл меньше входного файла. Смотрите комментарий ниже, почему это невозможно.
Большинство алгоритмов сжатия использовать Что называется таблица символов, поясню только peices файла он использует в качестве элементов он МОЖЕТ сжимают. Это, конечно, создает некоторые накладные расходы в файле, но обычно приводит к гораздо меньшему файлу.
В уже сжатых файлах он по-прежнему создает набор символов, но есть очень мало, что может уменьшить размер. В вашем случае таблица символов уже сжатого файла, вероятно, находится в районе 2 МБ или больше, если ей удалось выполнить некоторое сжатие.