Ответы:
Это очень сильно зависит от сжимаемых данных. Быстрый тест с файлом 1 Гб, заполненным нулями, дает сжатый размер ~ 120 КБ, поэтому ваш файл 10 КБ может потенциально расшириться до ~ 85 МБ.
Если для начала данные имеют низкую избыточность, например, архив содержит файлы изображений в формате, который изначально сжат (gif, jpg, png, ...), тогда gzip может вообще не добавлять дополнительное сжатие. Для двоичных файлов, таких как исполняемые файлы программы, вы можете увидеть сжатие до 2: 1, для простого текста, HTML или других разметок 3: 1 или 4: 1 или более, что не исключено. В некоторых случаях вы можете видеть 10: 1, но ~ 8700: 1, видимый с файлом, заполненным одним символом, - это то, что вы не увидите в подобных искусственных обстоятельствах.
Вы можете проверить, сколько данных получится в результате распаковки gzip-файла, без фактической записи его несжатого содержимого на диск, с помощью gunzip -c file.gz | wc --bytes
- это распакует файл, но не сохранит результаты, а вместо этого wc
передаст их, чтобы подсчитать количество байтов при их передаче. затем отбросьте их. Если сжатый контент представляет собой tar-файл, содержащий много мелких файлов, вы можете обнаружить, что для распаковки полного архива требуется заметно больше дискового пространства, но в большинстве случаев число, возвращаемое из результатов передачи gunzip
по конвейеру, wc
будет настолько точным, насколько вам нужно.
phpinfo()
, сжимается очень хорошо. Техническая информация в этом выводе содержит более прямое повторение, чем средняя часть естественного языка, и распределение алфавита, вероятно, менее гладкое, что может помочь стадии Хаффмана получить лучшие результаты.
Обычно сжатие не превышает 95% (сжатые данные размером 10 КБ распаковываются до ~ 200 КБ), но есть специально созданные файлы, которые расширяются в геометрической прогрессии. Ищите 42.zip
, это распаковывает до нескольких петабайт (бессмысленных) данных.
Цитируется дословно из https://stackoverflow.com/a/16794960/293815
Максимальный коэффициент сжатия формата deflate составляет 1032: 1. Это связано с тем, что самый длинный цикл, который может быть закодирован, составляет 258 байтов. Для каждого такого прогона требуются по меньшей мере два бита (один бит для кода длины и один бит для кода расстояния), следовательно, 4 * 258 = 1032 несжатых байта могут быть закодированы на один сжатый байт.
Вы можете получить большее сжатие, распаковав результат gzip. Обычно это не улучшает сжатие, но для очень длительных запусков это может.
Кстати, подход LZ77, используемый deflate, является более общим, чем кодирование длин серий. Вместо длины используется пара длина / расстояние. Это позволяет копировать строку с некоторого расстояния назад или реплицировать байт, как в длине пробега, на расстояние один, или реплицировать тройки байтов с расстоянием три и т. Д.
Степень сжатия любого алгоритма сжатия будет зависеть от сжимаемых данных (помимо длины этих данных).
Вот анализ в MaximumCompression ,
посмотрите на один из примеров, как,
Сводка тестов на сжатие нескольких файлов
Тип файла: несколько типов файлов (всего 46) Количество файлов для сжатия в этом тесте: 510 Общий размер файла (в байтах): 316,355.757 Средний размер файла (в байтах): 620,305 Самый большой файл (в байтах): 18,403,071 Наименьший файл (в байтах): 3,554
Огромный файл, содержащий только один символ, будет очень хорошо сжиматься.
Ответ на ваш вопрос зависит от ввода. Чтобы дать вам представление о том, как осуществляется сжатие, посмотрите эти шесть минут видео.
https://www.youtube.com/watch?v=ZdooBTdW5bM
Из этого следует, что степень сжатия зависит от частоты каждого символа, поэтому максимальная скорость генерации отсутствует, она зависит от ввода, для английского текста она составляет около 65 процентов.