Я должен выбрать алгоритм сжатия для сжатия некоторых данных. Я не знаю тип данных, которые я буду сжимать заранее (думайте о нем как отчасти как программа WinRAR).
Я услышал о следующих алгоритмах, но я не знаю, какой я должен использовать. Кто-либо может отправить короткий список за и против? Для моего приложения первоочередная задача является скоростью распаковки; вторая по важности задача является оставленным свободным местом. Сжатие (не распаковка) скорость не важно.
Если вам нужна высокая скорость декомпрессии, вам следует использовать LZO. Его скорость и степень сжатия приличные, но его трудно превзойти скорость декомпрессии.
Я провел несколько тестов для сжатия файла .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): (
В ядре Linux это хорошо объяснено (из тех, что включены):
Я не использовал другие, поэтому трудно сказать, но скорость алгоритмов может сильно зависеть от архитектуры. Например, есть исследования, что сжатие данных на жестком диске ускоряет ввод-вывод, поскольку процессор настолько быстрее диска, что это того стоит. Однако это в значительной степени зависит от размера узких мест.
Аналогично, один алгоритм может широко использовать память, что может вызвать или не вызвать проблемы (12 Мб - это много или очень мало? На встроенных системах это много; на современных x86 это крошечный фрагмент памяти).
Взгляните на 7zip . Это открытый исходный код и содержит 7 отдельных методов сжатия. Некоторое небольшое тестирование, которое мы провели, показывает, что формат 7z дает гораздо меньший файл результатов, чем zip, и он также был быстрее для образцов данных, которые мы использовали.
Поскольку нашим стандартным сжатием является zip, мы еще не рассматривали другие методы сжатия.
Чтобы получить исчерпывающий тест на текстовых данных, вы можете воспользоваться тестом Large Text Compression Benchmark .
Для других типов это может быть показательным .