Как кодировка Хаффмана узнает длину каждого кода значения, который она читает? - PullRequest
1 голос
/ 30 марта 2019

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

Например, если вы представляете символьную строку «ETQ A» с помощью кодовой серии «01 - 110 - 1101 - 1 - 10», как узнать, где начинается один символ, а другой заканчивается? Как вы знаете, чтобы прочитать два бита в индексе 1, три бита в индексе 2 и т. Д.

1 Ответ

0 голосов
/ 30 марта 2019

При декодировании есть две возможности:

  1. Дерево кодирования Хаффмана
  2. Входные байты

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

декодирование http://people.cs.pitt.edu/~kirk/cs1501/animations/Huffman/huff_dec.gif

Затем вы продолжаете использовать биты, пока все символы не будут декодированы

Взято из http://people.cs.pitt.edu/~kirk/cs1501/animations/Huffman.html

The decoding procedure is deceptively simple. 
Starting with the first bit in the stream, one then uses successive bits from 
the stream to determine whether 
to go left or right in the decoding tree.
When we reach a leaf of the tree, 
we've decoded a character, so we place
that character onto the (uncompressed)     
output stream. The next bit in the 
input stream is the first bit of the 
next character.
...