Следом за анонсированным алгоритмом сжатия ZSTD, Рич Гелдрих (Rich Geldreich), работавший в компании Valve, принимавший участие в разработке ряда известных компьютерных игр и развивающий несколько проектов по сжатию текстур (crunch, miniz, picojpeg), представил первый стабильный релиз собственной системы сжатия LZHAM 1.0, созданной в рамках проекта по разработке эффективного кодека для сжатия ресурсов, поставляемых в составе игровых приложений. Код реализации LZHAM написан на языке С++ и поставляется под лицензией MIT.

Из особенностей LZHAM отмечается поддержка патчей (delta-изменений), позволяющих распространять изменения без перепаковки уже сжатых файлов. Для повышения эффективности сжатия в LZHAM могут использоваться таблицы сопоставления, размером до 64 Кб, а также словари, размером до 500 Мб. LZHAM также опционально предоставляет средства для сжатия с распараллеливанием вычислений в несколько потоков.

Начиная с выпуска LZHAM 1.0 формат закодированных данных не будет меняться, что гарантирует совместимость с будущими выпусками. При этом совместимость формата с ранее представленными альфа-версиями не гарантируется. Официально поддерживаются платформы x86/x64 Linux, iOS, OSX и Windows x86/x64, следующим шагом станет поддержка Android.

LZHAM предназначен для достижения как можно более высокой степени сжатия и обеспечения высокой скорости распаковки, за счёт требующей интенсивных вычислений стадии сжатия. По уровню сжатия и скорости упаковки реализация LZHAM сравнима с LZMA, но по скорости распаковки опережает LZMA в 1.5-8 раз (но медленнее zlib). Упаковка производится достаточно медленно и требует больших ресурсов, что ограничивает алгоритм применением для областей, в которых необходимо часто и очень быстро распаковывать один раз упакованные данные. Из ограничений также отмечается плохая эффективность при сжатии небольших порций данных, не превышающих 10 Кб.

Попытки сравнения LZHAM с ZSTD Рич Гелдрих прокомментировал тем, что данные методы нацелены на разные области применения и занимают разные ниши. LZHAM ориентирован на обеспечение максимально возможного уровня сжатия, в то время как ZSTD пытается найти оптимальный баланс между эффективностью и скоростью. Обе системы поддерживают совместимый с zlib API. По эффективности сжатия LZHAM опережает ZSTD, а по скорости декодирования немного отстаёт от ZSTD. По скорости кодирования LZHAM в 8 раз отстаёт от ZSTD и не может использоваться для сжатия потоков на лету, подходя лишь для offline-применения. При этом Рич Гелдрих намерен перейти на использование созданного автором ZSTD кода обработки энтропии FSE (Finite State Entropy), реализация которого значительно проще.



Источник: http://www.opennet.ru/opennews/art.shtml?num=41536