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