Цитата Сообщение от GriV
Но этот метод имеет свои недостатки: для последовательностей, где нет ярко выраженных лидеров частот (т.е. после частотного анализа
все значения лежат более-менее в одной категории), этот метод даст увеличение конечного файла относительно исходного.
Сорри что я тут встреваю. Но вообще-то Хафманское и арифметическое сжатие, это методы которые не дают потерь. И в худшем случае размер данных никогда не увеличивают. Если не считать того что приходится хранить таблицу (на практике я в этом сам убеждался, немного сжимаются даже случайные данные).

В Хафмане дерево строится так. Берутся символы считается число их вхождений в файл. Допустим если у нас есть 4 символа A,b,c,d которые появляются в файле 10 33 45 99 раз. Мы составляем таблицу в которой находим два самых редких символа и суммируем их числа. В итоге получается как бы их общее число вхождений которые мы вставляем в таблицу вместо этих двух(в соотвествующее место). Затем делаем тоже самое, в двумя самыми редкими элементами и так пока не останется два элемента....
В итоге (см. картинку символы будут кодироваться так) -
A - 0, B - 11, C - 100, D - 101
В итоге весь файл длиной 191 байт у нас умещается в 64 байта...
Саму систему составления кодов можно сделать ввиде односвязного списка в котором нужно выделить максимум 512 элементов. На спектруме особых проблем с памятью и скоростью упаковки не возникает....

Надеюсь что я изложил достаточно понятно. (не могу сейчас как следует свои слова обдумать, потому что из дома надо уходить, т.к. опаздываю)