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