Как стать автором
Обновить

Комментарии 6

Любой алгоритм сжатия (если без потерь) работает приблизительно так же - часто встречающиеся символы заменяются более короткими кодами. Есть у арифметичекого кодирования какие-то преимущества/недостатки по сравнению с алгоритмом Хаффмана, например?

есть, дробная длина кода в битах, то есть Хаффман в самом меньшем значении оперирует 1 битом и сильнее чем в 8 раз он не сожмёт

"В 2013 году была предложена модификация алгоритма Хаффмана, позволяющая кодировать символы дробным количеством бит — ANS"

и как это связано? или вы разговаривая про LZ77 подразумеваете десятки всех LZ алгоритмов сразу, кто вас тогда поймёт правильно? Хаффман к ANS никакого отношения не имеет, поэтому вы либо говорите про алгоритм Хаффмана либо про ANS - это абсолютно разные алгоритмы.

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

Арифметическое кодирование предназначено для того, чтобы решить эту проблему. Основная идея заключается в том, чтобы присваивать коды не отдельным символам, а их последовательностям.

Ну и ваше "приблизительно" слишком приблизительно. Вы говорите только об энропийном кодировании, а оно не единственное.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации