Условие для однобитового кода для символа в коде Хаффмана? - PullRequest
8 голосов
/ 21 июня 2010

Это вопрос, с которым я столкнулся в школьных настройках, но он продолжает беспокоить меня, поэтому я решил задать его здесь.

В сжатии Хаффмана последовательности фиксированной длины (символы) кодируются последовательностями переменной длины. Длина кодовой последовательности зависит от частот (или вероятностей) исходных символов.

Мои вопросы: какова минимальная максимальная частота символов, с которой этот символ будет кодироваться одним битом?

Ответы [ 2 ]

7 голосов
/ 24 июня 2010

Получается, что ответ равен 0,4, то есть, если наибольшая частота p равна p> = 0,4 , 1-битный код для соответствующего символа гарантирован.Другими словами, это достаточное условие.

Также верно, что p> = 1/3 является необходимым условием.То есть могут быть примеры, когда 0,4> p> = 1/3 , а самый короткий код является 1-битным, но таких случаев нет, если p <1/3 </em>.

Способ рассуждать об этом - посмотреть, как строится дерево кодов, в частности, на частотах 3 последних выживших поддеревьев.Доказательство появляется в Йонсене, «Об избыточности двоичных кодов Хаффмана», 1980 (к сожалению, это платная ссылка).

7 голосов
/ 21 июня 2010

Как правило, около 50% входящего потока символов должно было бы состоять из заданного символа, чтобы Хаффман кодировал его как один бит.Причина этого заключается в том, что из-за того, как работает кодирование Хаффмана (кодирование одного символа не может быть префиксом другого), при кодировании символа с одним битом требуется, чтобы первый бит для каждого другого символа будет противоположным значением (т. е. если один символ закодирован как 0, все остальное должно начинаться с 1 плюс хотя бы еще один бит).Поскольку вы устраняете половину возможного пространства кодирования для любой заданной длины в битах, вам необходимо найти способ кодировать по меньшей мере половину символов, вводимых для безубыточности.

Обратите внимание, что существуетособый случай, когда пространство символов состоит только из 3 символов.В таком случае любой символ с наибольшей частотой будет закодирован с 1 битом (поскольку два других будут 2-битными вариациями того, какое значение первого бита не выбрано) - если 2 или более имеют одинаково большую вероятность,любой из них может быть закодирован.Таким образом, в случае с 3 символами возможно, что символ с, скажем, вероятностью 34% может быть теоретически закодирован как один бит (скажем, 0), тогда как два других могут иметь вероятности 33% или ниже и быть закодированы как10 и 11.

Итак, если вы рассматриваете все возможности, то технически все, что 1/3 или выше, потенциально может быть закодировано как один бит (в 3-регистр символов).

...