Каков максимальный коэффициент сжатия gzip?
Какой самый большой размер gzip (скажем, 10 кб для примера) может быть распакован?
Какой самый большой размер gzip (скажем, 10 кб для примера) может быть распакован?
Обновление 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
, будет столь же точным, сколько вам нужно.
Цитируется дословно из https://stackoverflow.com/a/16794960/293815
Максимальная степень сжатия сдувающегося формата 1032:1. Это связано с тем, что самый длинный промежуток времени, который может быть закодирован, составляет 258 байт. Для каждого такого прогона требуется как минимум два бита (один бит для кода длины и один бит для кода расстояния), поэтому 4*258 = 1032 несжатых байта может быть закодировано на один сжатый байт.
Вы можете получить большее сжатие путем gzipping результата gzip. Обычно это не улучшает сжатие, но для очень длительных периодов времени это возможно.
Кстати, подход LZ77, используемый при сдувании, является более общим, чем кодирование длины пробега. Вместо длины используется пара длина/расстояние. Это позволяет скопировать строку с некоторого расстояния назад, или скопировать байт как в run-length на расстояние в один, или скопировать три байта с расстояния в три и т.д.
Коэффициент сжатия любого алгоритма сжатия будет функцией сжимаемых данных (кроме длины этих данных).
Вот анализ по адресу 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
Ответ на ваш вопрос, зависит от ввода. Чтобы дать вам представление о том, как производится сжатие, посмотрите эти шесть минут видео. https://www.youtube.com/watch?v=ZdooBTdW5bM
Скорость сжатия зависит от частоты каждого персонажа, таким образом, нет максимальной скорости жанра, она зависит от входа, для английского текста она составляет около 65 процентов.