Encoding 哈夫曼编码如何知道每个值代码的长度;她在读书吗?

Encoding 哈夫曼编码如何知道每个值代码的长度;她在读书吗?,encoding,huffman-code,Encoding,Huffman Code,我想了解哈夫曼编码是如何工作的。我读过的所有摘要都解释了如何生成值代码,但没有解释如何实际读取它们的完整过程。我想知道算法是如何知道它读取的每个值的位长度的 例如,如果用代码系列“01--110--1101--1--10”表示符号字符串“ETQ A”,那么如何知道一个符号从何处开始,另一个符号从何处结束?您如何知道在索引1处读取两位,在索引2处读取三位,等等?解码时,有两个给定值: 哈夫曼编码树 输入字节 然后,您只需消耗这些位,直到到达一个叶节点,在这一点上,您将终止该单字符解码 (来源:)

我想了解哈夫曼编码是如何工作的。我读过的所有摘要都解释了如何生成值代码,但没有解释如何实际读取它们的完整过程。我想知道算法是如何知道它读取的每个值的位长度的


例如,如果用代码系列“01--110--1101--1--10”表示符号字符串“ETQ A”,那么如何知道一个符号从何处开始,另一个符号从何处结束?您如何知道在索引1处读取两位,在索引2处读取三位,等等?

解码时,有两个给定值:

  • 哈夫曼编码树
  • 输入字节
  • 然后,您只需消耗这些位,直到到达一个叶节点,在这一点上,您将终止该单字符解码


    (来源:)

    然后继续消耗位,直到所有字符都被解码

    取自


    好的,澄清一下,这意味着一个代码的一些可能的位值被用来表示代码的结束?也就是说,在一个四位序列的16个可能值中,您只能表示8个或10个不同的符号,因为6-8个可能值用于表示“符号代码完成,停止读取我?”不。请这样想。如果输入是用哈夫曼树编码的,它只创建编码所需的位序列。不多也不少。因此,在解码时,我们本质上只有准确的正确量来表示压缩(编码)流,而压缩(编码)流将始终使用所需的比特量进行解码
    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.