не мог бы кто прокомментировать кусок из исходника метода сжатия aPLib if (offs >= 32000) len++; if (offs >= 1280) len++; if (offs < 128) len += 2;
А че тут сбсно коментировать?... len наращивается на 2 если offs >= 32000 или ести offs < 128 len наращивается на 1 если 32000 > offs >= 1280 Простая оптимизация теста на вхождение значения в диапазон...
Сначала разберись, как работает LZ алгоритм, вопросы отпадут сами собой - это оптимизация копирования lz фразы: При большых смещениях внутри окна нет смысла кодировать короткие фразы, вот и наращивают длину. Вопросы есть?
а чего тогда длину наращивать при offs < 128 ?! Я боюсь, что чего-то действительно не понимаю... :-( Теория по LZ была прочитана. Но по одному исходнику все равно не могу разобрать до конца алгоритм aPLib. Может еще чего посоветуете почитать. Спасибо за ответ.
Прошу прощения, а разве где-то пробегал исходник сжатия aplib? Сам автор его вроде не отдает. Или имеется ввиду реверсированный вариант?
Распаковщик там в исходниках, а вот упаковка не является OpenSource. IMHO только по распаковщику понять алгоритм упаковки можно не всегда.
> а чего тогда длину наращивать при offs < 128 ?! Опять же оптимизация - по статистике, lz фраз в ближайших 128 байтах должно быть много и достоточно длинных (больше 2х байт), поэтому можно сэкономить на кодировании длины. > IMHO только по распаковщику понять алгоритм упаковки можно не всегда. В данном случае, это чистый LZ, и соответственно алгоритм упаковки такой же как у всех других LZ отличаются они только способом кодирования смещения/длины фразы, методом выбора отимальной (по длине кода) фразы, и небольшой оптимизацией для бинарников (кодирование нулей). Понять все эти тонкости из распаковщика совсем не сложно, было бы желание.
> использовние флага LWM тоже связано с оптимизацией ? Естественно! Все современные чистые LZ алгоритмы отличаются только способом кодирования литералов/фраз и некоторых методов оптимизаций кодирования потока. aplib позиционируется для сжатия бинарных данных, отсюда и такая оптимизация. Был бы под текст сделал - все было бы чуть по другому.