Я должен выбрать алгоритм сжатия

Я должен выбрать алгоритм сжатия для сжатия некоторых данных. Я не знаю тип данных, которые я буду сжимать заранее (думайте о нем как отчасти как программа WinRAR).

Я услышал о следующих алгоритмах, но я не знаю, какой я должен использовать. Кто-либо может отправить короткий список за и против? Для моего приложения первоочередная задача является скоростью распаковки; вторая по важности задача является оставленным свободным местом. Сжатие (не распаковка) скорость не важно.

  • Выкачать
  • Интегрироваться
  • Простой Хаффман
  • bzip2
  • lzma
6
задан chiz 7 March 2010 в 18:52
поделиться

5 ответов

Если вам нужна высокая скорость декомпрессии, вам следует использовать LZO. Его скорость и степень сжатия приличные, но его трудно превзойти скорость декомпрессии.

5
ответ дан 8 December 2019 в 05:54
поделиться

Я провел несколько тестов для сжатия файла .tar, который содержал смесь данных с высокой энтропией и текста. Вот результаты:

Name  - Compression rate* - Decompression Time
7zip  - 87.8%             - 0.703s
bzip2 - 80.3%             - 1.661s
gzip  - 72.9%             - 0.347s
lzo   - 70.0%             - 0.111s

*Higher is better

Из этого я пришел к выводу, что степень сжатия алгоритма зависит от его имени; первым в алфавитном порядке будет тот, у которого будет наилучшая степень сжатия и т. д.

Поэтому я решил переименовать lzo в 1lzo . Теперь у меня лучший алгоритм.


РЕДАКТИРОВАТЬ : стоит отметить, что из всех, к сожалению, lzo - единственный с очень ограниченной лицензией (GPL): (

10
ответ дан 8 December 2019 в 05:54
поделиться

В ядре Linux это хорошо объяснено (из тех, что включены):

  • Deflate (gzip) - быстро, худшее сжатие
  • bzip2 - медленно, среднее сжатие
  • lzma - очень медленное сжатие, быстрая распаковка (однако медленнее, чем gzip), лучшее сжатие

Я не использовал другие, поэтому трудно сказать, но скорость алгоритмов может сильно зависеть от архитектуры. Например, есть исследования, что сжатие данных на жестком диске ускоряет ввод-вывод, поскольку процессор настолько быстрее диска, что это того стоит. Однако это в значительной степени зависит от размера узких мест.

Аналогично, один алгоритм может широко использовать память, что может вызвать или не вызвать проблемы (12 Мб - это много или очень мало? На встроенных системах это много; на современных x86 это крошечный фрагмент памяти).

4
ответ дан 8 December 2019 в 05:54
поделиться

Взгляните на 7zip . Это открытый исходный код и содержит 7 отдельных методов сжатия. Некоторое небольшое тестирование, которое мы провели, показывает, что формат 7z дает гораздо меньший файл результатов, чем zip, и он также был быстрее для образцов данных, которые мы использовали.

Поскольку нашим стандартным сжатием является zip, мы еще не рассматривали другие методы сжатия.

2
ответ дан 8 December 2019 в 05:54
поделиться

Чтобы получить исчерпывающий тест на текстовых данных, вы можете воспользоваться тестом Large Text Compression Benchmark .

Для других типов это может быть показательным .

1
ответ дан 8 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: