Как декодировать код Хаффмана без свойства префикса - PullRequest
1 голос
/ 03 ноября 2019

Я пытаюсь декодировать буфер, закодированный с помощью Модифицированного кодирования Хаффмана .

Вот начало буфера: 000111100001111011111010001000011101000011101000011110

Из просмотра таблица перевода , похоже, что свойство префикса, необходимое для Модифицированного Хаффмана, не гарантируется. Согласно таблице, я вижу, что 00011 означает 7B, но 000111 означает 1W. В этом случае, как мне декодировать буфер выше? Я неправильно читаю таблицу или есть какой-то нюанс в алгоритме, который мне не хватает?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Модифицированное кодирование Хаффмана использует поочередное кодирование белого и черного пикселей. Кодирование всегда начинается с белого пикселя. Итак, в вашем примере буфер декодируется в 000111=1W, 10=3B, 000111=1W и т. Д.

1 голос
/ 05 ноября 2019

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

00110101 = 0W
000111   = 1W
and so on...

В вашем примере вы начинаете с 1W 000111, затем 3B 10 и так далее ...

Как указал Джон, ваша таблица перевода неверна. Правильную таблицу можно найти здесь: Правильно измененная таблица перевода кодов Хаффмана

...