【发布时间】:2014-04-21 05:04:23
【问题描述】:
假设我有一个只有一个字符的大量字符串,比如x。我需要使用霍夫曼编码。
霍夫曼编码是完全二叉树。那么,当我们根本不需要两片叶子时,如何为单个字符创建霍夫曼代码呢?
【问题讨论】:
标签: huffman-code
假设我有一个只有一个字符的大量字符串,比如x。我需要使用霍夫曼编码。
霍夫曼编码是完全二叉树。那么,当我们根本不需要两片叶子时,如何为单个字符创建霍夫曼代码呢?
【问题讨论】:
标签: huffman-code
jbr 的回答很好;这只是它的更长版本。
假设解码器已经知道符号集,Huffman 旨在生成包含原始符号序列中所有信息的最小长度位序列。如果只有一个符号,则输入数据除了长度之外不包含任何信息。
在基于 Huffman 的数据格式中,长度通常单独编码,而不是作为 Huffman 编码位序列本身的一部分。因此,单符号霍夫曼码的解码器拥有重构输入所需的所有信息,而无需从霍夫曼编码的比特序列中读取任何内容。因此,霍夫曼编码器的输出应该是 0 位是合乎逻辑的。
如果您没有单独编码的长度,那么您必须有一个符号来表示序列结束,以便解码器知道何时停止读取。那么你的霍夫曼树将有 2 个节点,你不会遇到这种特殊情况。
【讨论】:
如果您只有一个符号,那么每个符号只需要 1 位。所以你真的不需要做任何事情,除了计算位数并将每个转换成你的符号。
【讨论】: