
Комментарии 6
Любой алгоритм сжатия (если без потерь) работает приблизительно так же - часто встречающиеся символы заменяются более короткими кодами. Есть у арифметичекого кодирования какие-то преимущества/недостатки по сравнению с алгоритмом Хаффмана, например?
Алгоритм Хаффмана эффективен, когда частоты появления символов пропорциональны 1/2n (где n – натуральное положительное число). Это утверждение становится очевидным, если вспомнить, что коды Хаффмана для каждого символа всегда состоят из целого числа бит. Рассмотрим ситуацию, когда частота появление символа равна 0,2, тогда оптимальный код для кодирования это символа должен иметь длину –log2(0,2)=2,3 бита. Понятно, что префиксный код Хаффмана не может иметь такую длину, т.е. в конечном итоге это приводит к ухудшению сжатия данных.
Арифметическое кодирование предназначено для того, чтобы решить эту проблему. Основная идея заключается в том, чтобы присваивать коды не отдельным символам, а их последовательностям.
Слова одни скрывают часто слова другие