На тексте Salinger's "The Catcher in the Rye" арифметический кодер показал результат в 212 149 байт, Хаффман - 213 509 байт. С учётом прилагаемого дерева у Хаффмана и таблицы частотности у кодера. Внимание, вопрос: а стоил ли этот геморрой полутора килобайт? Правда, у кодера, в отличие от Хаффмана, есть простор для оптимизации - у меня таблица частотности выглядит как массив (символ Word8, граница в диапазоне Word32). Можно, например, сократить диапазон частотности до [0, 2^16) вместо [0, 2^31) - это позволит сэкономить до 512 байт. Но, согласитесь, звучит как-то мелко...
Здесь есть подробно прокомментированный код на Си. А здесь на пальцах описываются основные методы сжатия.
Устал уже делать комментарии насчёт е***утости неправильного подхода к синтаксису у разработчиков. Два дня у меня эта программа висла из-за по умолчанию рекурсивных определений.