2010-05-09 11:47:14 +0000 2010-05-09 11:47:14 +0000
53
53

Каков максимальный коэффициент сжатия gzip?

Какой самый большой размер gzip (скажем, 10 кб для примера) может быть распакован?

Ответы (7)

95
95
95
2010-05-09 13:11:52 +0000

Обновление 2020-02-06: Как упоминалось в комментариях, я не смог воспроизвести первоначальный результат с помощью gzip. Работая на предположении, что я случайно использовал другой формат сжатия в том оригинальном быстром тесте, который я повторил с gzip и соответственно обновил приведенные ниже цифры. Этот новый результат соответствует теоретическому максимальному сжатию, указанному в других ответах/комментариях.


Это очень сильно зависит от сжимаемых данных. Быстрый тест с 1Гб файлом, полным нулей, с использованием стандартной версии gzip (с опциями по умолчанию или указанием -9) дает сжатый размер ~1018Кб, так что ваш 10Кб файл может потенциально расшириться до ~10Мбайт.

Если данные имеют низкую избыточность для начала, например, архив содержит файлы изображений в формате, сжатом в исходном формате (gif, jpg, png, …), то gzip может вообще не добавлять дополнительное сжатие. Для бинарных файлов, таких как программные исполняемые файлы, сжатие до 2:1, для простого текста, HTML или других разметок 3:1 или 4:1 и более не маловероятно. В некоторых случаях вы можете видеть 10:1, но ~1030:1 с файлом, наполненным одним символом - это то, что вы не увидите за пределами аналогичных искусственных обстоятельств.

Вы можете проверить, сколько данных получится в результате распаковки gzip-файла, не записывая его несжатое содержимое на диск, с gunzip -c file.gz | wc --bytes - это распаковка файла, но не сохранение результатов, а передача их в wc, которая будет считать количество байт при их прохождении, а затем отбрасывать их. Если сжатое содержимое представляет собой tar-файл, содержащий много маленьких файлов, вы можете обнаружить, что для распаковки полного архива требуется заметно больше дискового пространства, но в большинстве случаев счетчик, возвращаемый с конвейера gunzip на выходе через wc, будет столь же точным, сколько вам нужно.

10
10
10
2010-05-09 12:04:29 +0000

Обычно вы не получаете более 95% сжатия (так что 10 кБ gzipped данных распаковывается до ~200 кБ), но есть специально созданные файлы, которые расширяются экспоненциально. Ищите 42.zip, он распаковывает до нескольких петабайт (бессмысленных) данных.

8
8
8
2017-05-11 14:16:39 +0000

Цитируется дословно из https://stackoverflow.com/a/16794960/293815

Максимальная степень сжатия сдувающегося формата 1032:1. Это связано с тем, что самый длинный промежуток времени, который может быть закодирован, составляет 258 байт. Для каждого такого прогона требуется как минимум два бита (один бит для кода длины и один бит для кода расстояния), поэтому 4*258 = 1032 несжатых байта может быть закодировано на один сжатый байт.

Вы можете получить большее сжатие путем gzipping результата gzip. Обычно это не улучшает сжатие, но для очень длительных периодов времени это возможно.

Кстати, подход LZ77, используемый при сдувании, является более общим, чем кодирование длины пробега. Вместо длины используется пара длина/расстояние. Это позволяет скопировать строку с некоторого расстояния назад, или скопировать байт как в run-length на расстояние в один, или скопировать три байта с расстояния в три и т.д.

6
6
6
2010-05-09 12:03:51 +0000

Коэффициент сжатия любого алгоритма сжатия будет функцией сжимаемых данных (кроме длины этих данных).

Вот анализ по адресу MaximumCompression , Посмотрите на один из примеров, например, Summary of the multiple file compression benchmark tests

File type : Multiple file types (46 in total) # of files to compress in this test : 510 Total File Size (bytes) : 316.355.757 Average File Size (bytes) : 620,305 Largest File (bytes) : 18,403,071 Smallest File (bytes) : 3,554
4
4
4
2010-05-09 12:44:19 +0000

Огромный файл, содержащий только один символ, очень хорошо сжимается.

4
4
4
2013-04-07 13:12:41 +0000

10 Мб нулей в файле, сжатие с gzip -9 до 10217. Таким образом, максимальное соотношение выглядит примерно в 1000 раз.

1
1
1
2016-10-17 02:32:42 +0000

Ответ на ваш вопрос, зависит от ввода. Чтобы дать вам представление о том, как производится сжатие, посмотрите эти шесть минут видео. https://www.youtube.com/watch?v=ZdooBTdW5bM

Скорость сжатия зависит от частоты каждого персонажа, таким образом, нет максимальной скорости жанра, она зависит от входа, для английского текста она составляет около 65 процентов.