Відповіді:
Це дуже залежить від стиснення даних. Швидкий тест з 1Gb-файлом, заповненим нулями, дає стислий розмір ~ 120Kb, тому ваш 10Kb-файл може потенційно розширитися до ~ 85Mbytes.
Якщо дані мають низьку надмірність, для початку, наприклад, в архіві містяться файли зображень у форматі, який стискається власне (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 кБ gzipped дані декомпресуються до ~ 200 кБ), але є спеціально створені файли, які розширюються експоненціально. Шукайте 42.zip
, він розкладається на кілька петабайт (безглуздих) даних.
Дослівно цитується з https://stackoverflow.com/a/16794960/293815
Максимальний коефіцієнт стиснення формату дефляції становить 1032: 1. Це тому, що найдовший пробіг, який можна закодувати, - 258 байт. Для кожного такого запуску потрібно щонайменше два біти (один біт для коду довжини і один біт для коду відстані), отже, 4 * 258 = 1032 нестиснених байтів можуть бути закодовані на один стислий байт.
Ви можете отримати більше стиснення, gzipping результат gzip. Зазвичай це не покращує стиснення, але дуже довго працює.
До речі, підхід LZ77, використовуваний при дефляті, є більш загальним, ніж кодування довжиною пробігу. Замість просто довжини використовується пара довжини / відстані. Це дозволяє копіювати рядок з деякої відстані назад або реплікувати байт, як у довжині виконання, на відстань до однієї, або копіювати трійку байтів на відстань три і т.д.
Коефіцієнт стиснення будь-якого алгоритму стиснення буде функцією даних, що стискаються (крім довжини цих даних).
Ось аналіз на MaximumCompression ,
Подивіться на одному із зразків , таких як,
Короткий виклад тестів на стиснення декількох файлів
Тип файлу: декілька типів файлів (всього 46) Кількість файлів для стиснення в цьому тесті: 510 Загальний розмір файлу (байти): 316.355.757 Середній розмір файлу (байти): 620,305 Найбільший файл (байти): 18 403,071 Найменший файл (байти): 3,554
Відповідь на ваше запитання залежить від введення. Щоб дати вам уявлення про те, як робиться стиснення, перегляньте ці шість хвилин відео.
https://www.youtube.com/watch?v=ZdooBTdW5bM
Що ви повинні отримати від цього, це те, що швидкість стиснення залежить від частоти кожного символу, таким чином, немає максимальної швидкості генералу, це залежить від введення, для англійського тексту це близько 65 відсотків.