Условие однобитового кода для символа в коде Хаффмана?

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

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

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


person daphshez    schedule 21.06.2010    source источник


Ответы (2)


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

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

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

person daphshez    schedule 24.06.2010
comment
За исключением тривиального двоичного случая — если есть только 2 символа, Хаффман всегда назначает 1 бит каждому символу, независимо от частоты. - person David Cary; 26.07.2011
comment
Доказательство этого включено в качестве приложения в препринт arxiv. К сожалению, я не могу следовать рассуждениям... Я не понимаю, почему обязательно верно, что узел с меткой u был объединен до узлов с метками v1 и v2. - person Periata Breatta; 22.11.2016

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

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

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

person Amber    schedule 21.06.2010
comment
Единственным исключением являются 3 символа равной вероятности: они могут быть закодированы как 0, 10, 11. - person Artelius; 21.06.2010
comment
Да, я уже добавлял это в качестве примечания. :) Это крайний случай, но потенциально актуальный. - person Amber; 21.06.2010
comment
Есть и другие, связанные случаи (1/3, 1/6, 1/6, 1/6, 1/6), но это верно не для всех случаев, когда один символ имеет вероятность 1/3. Я хотел бы увидеть ответ, который показывает, в чем разница. - person Artelius; 21.06.2010
comment
Спасибо, Эмбер, но я не уверен, что ваши рассуждения верны. Например, для 4 символов с частотами (0,41, 0,2, 0,2, 0,19) я полагаю, что кодировка будет (0, 10, 110, 111). Это даст лучшее сжатие, чем 4 двухбитных символа, например. для 100 символов потребуется 198 бит вместо 200. Однако я все еще не уверен, как обобщить эту идею. - person daphshez; 22.06.2010
comment
Рассуждение предназначено для общих случаев использования, когда количество символов составляет ››› 2^2, и, таким образом, большинство символов будут закодированы в более чем 2-3 бита. В случаях, когда количество символов невелико, экономия от замены 2 битов на 1 для символа относительно велика даже при более низких частотах, тогда как при большем общем количестве символов экономия меньше, если только символ не встречается с очень высокой частотой. частота. Однако определенно существует нижняя граница 1/3 (за исключением тривиального случая, когда количество символов меньше 3). - person Amber; 23.06.2010
comment
@Artelius - я верю этой статье дает некоторые рассуждения о том, почему некоторые, но не все случаи до p = 1/3 дают однобитовые символы, но это выходит за рамки моего понимания, поэтому я не могу обобщать. - person Periata Breatta; 22.11.2016
comment
Я думаю, что ваш ответ неверен. Как правильно утверждает ответ @daphshez, если есть какой-то символ с частотой больше 2/5, вам гарантировано, что будет какой-то символ, закодированный одним битом. Кроме того, если все символы имеют частоту менее 1/3, то вам гарантируется отсутствие символов, закодированных одним битом. Если ни одно из этих условий не выполняется, нетривиально определить, будет ли какой-либо символ кодироваться одним битом, без построения дерева Хаффмана. - person pzp; 10.04.2018