【问题标题】:Huffman code for a single character?单个字符的霍夫曼代码?
【发布时间】:2014-04-21 05:04:23
【问题描述】:

假设我有一个只有一个字符的大量字符串,比如x。我需要使用霍夫曼编码。 霍夫曼编码是完全二叉树。那么,当我们根本不需要两片叶子时,如何为单个字符创建霍夫曼代码呢?

【问题讨论】:

    标签: huffman-code


    【解决方案1】:

    jbr 的回答很好;这只是它的更长版本。

    假设解码器已经知道符号集,Huffman 旨在生成包含原始符号序列中所有信息的最小长度位序列。如果只有一个符号,则输入数据除了长度之外不包含任何信息。

    在基于 Huffman 的数据格式中,长度通常单独编码,而不是作为 Huffman 编码位序列本身的一部分。因此,单符号霍夫曼码的解码器拥有重构输入所需的所有信息,而无需从霍夫曼编码的比特序列中读取任何内容。因此,霍夫曼编码器的输出应该是 0 位是合乎逻辑的。

    如果您没有单独编码的长度,那么您必须有一个符号来表示序列结束,以便解码器知道何时停止读取。那么你的霍夫曼树将有 2 个节点,你不会遇到这种特殊情况。

    【讨论】:

      【解决方案2】:

      如果您只有一个符号,那么每个符号只需要 1 位。所以你真的不需要做任何事情,除了计算位数并将每个转换成你的符号。

      【讨论】:

      • 我明白这一点,但我的代码因单字符测试用例而失败。可以安全地假设 Huffman 算法不适用于单字符吗?
      • 我会这么说。真的没有意义,因为最短的可能编码只是符号加上字符串长度。
      猜你喜欢
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 2017-04-18
      相关资源
      最近更新 更多