Сжатие Хаффмана для бедных - PullRequest
1 голос
/ 08 февраля 2012

Я пытаюсь лучше понять, как работает декодер Хаффмана.У меня есть таблица кодов, но я с трудом пытаюсь понять, как будет работать декодер из-за неоднозначности в двоичной строке.

(я изучаю это в рамках подготовки к моему последнему году в универе)

моя таблица:

Data  Hcode
0,     0
1,     1
2,     10
3,     11
17,    100
18,    101
19,    110
29,    111

Если у меня есть строка кода Хаффмана, такая как 010011, я могу вернуть много разных комбинаций данных, так как я могу различить?

Я понимаю логику Хаффмана в BSTпредставление, и вы идете по пути к данному листу, который напоминает код для данного заданного значения между (0-255 (ascii)), но я все еще не знаю, как вы можете различить возвращая данные: 0,1,0 или данные:0,17

действительно ли мне нужно применять 2-битные коды к данным 0 и 1?(00 и 01)

Надеюсь, я объяснил лучшее, что я могу XD

Если вам интересно, как я сгенерировал таблицу, вы убьете меня, потому что я не использовал древовидную логику для ее генерации.Хотя я отсортировал данные (случайные байты) по частоте - я сгенерировал H-коды, конвертировав номер позиции элемента в двоичный код (хенси, почему я назвал этот пост «Бедный Мэн Хаффман»).

Большое спасибо за любые советы.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Кодовая таблица неверна.Оды Хаффмана должны быть без префиксов .Это необходимо для последующего их декодирования без двусмысленностей.

Если вы будете использовать двоичное дерево для создания кодов, это автоматически обеспечит «свободу префикса».Смотри: http://en.wikipedia.org/wiki/Huffman_coding

А теперь я тебя убью ...;)

2 голосов
/ 13 февраля 2012

Мало того, что таблица кодов неверна, длина кодов также неверна. Если у вас есть два однобитовых кода, вы уже израсходовали все пространство кода и не можете иметь других кодов. То, что вы показали, это не только код Хаффмана и не префиксный код - это фактически вовсе не код.

...