Комментарии 11
Интересно, насколько алгоритм отличается от скажем ACE или bz2, особенно по уровню сжатия.
(Когда-то давно я думал, что сжатие выкидывает из бинарного потока нули, оставляя только единицы. Сейчас как вспомнил, стыдно стало)
Надо будет сравнить, да выложить в данной статье результаты.
если же требовалось лучшее сжатие — использовали архиваторы, стандартом де-факто был LZX, алгоритм из которого (до сих пор?) используют майкрософты в своих инсталяторах.
- Какой конкретно метод сжатия в результате оказался?
- Не было бы проще взять только депакер и по нему восстановить формат сжатого файла, после чего заново написать пакер?
— Используется два окна
— Используется хранение указателей (в случае Амиги 24-битные, я сделал равными битности компилятора) на найденные ранее максимальные последовательности
— Эти последовательности хранятся как значения в словаре, в котором ключами являются word-ы, прочитанные из входного файла
Написать пакер по анпакеру было бы слишком сложно и он бы не был таким же по силе сжатия (слабее).
Да, как там с размерностью? Т.е. есть ли стенка в 2 или 4 ГБ? И ещё, один файл на входе=один на выходе? Тогда сравнивать надо с мелкомягким expand
Если там реально обрезают указатели до 24 бит, то весьма печальный факт. Дело в том, что у семейства процов 68k изначально регистры и все адреса имеют логические 32 бита, и только в некоторых ранних процах адреса обрезаются до физичесикх 24 бит. Но даже в A500 или A600 можно вставить 'акселератор' — платку с более новым/быстрым процом и локальной памятью сильно больше 2^24 байт, после чего извраты с 24 битами там работать перестанут.
Далее, по алгоритму. Если я понял, то никаких хаффманов или арифм. сжатий нет, только LZ-подобный алгоритм, где словарь=предыдущие N байт распакованного файла. А значит, возможно построение оптимальной последовательности, которая обеспечит наилучшее возможное сжатие для данного формата (==алгоритма распаковки). Алгоритм Дейкстры вам в помощь.
Получение исходного кода PowerPacker Cruncher от AmigaOS