扩展的霍夫曼代码

时间:2010-01-13 06:24:29

标签: huffman-code information-theory

我有这个功课:找到任何给定字母表中符号的代码字。它说我必须在三个符号组上使用二进制霍夫曼。这究竟是什么意思?我在[alphabet] ^ 3上使用常规的霍夫曼吗?如果是这样,我如何区分组中的3个符号?

2 个答案:

答案 0 :(得分:1)

我无法说清楚,因为你对这个问题的描述并不是那么详细,但我猜它们的意思是不是单独编码你的字母表中的每个符号,而是应该对每一个符号进行三次编码作为一个群体。

因此,例如,如果您的字母表由abc组成,而不是为每个字母单独生成编码,那么您将为{创建编码{1}},aaaaab等。这些字符串中的每一个都将被视为霍夫曼算法中的单独符号;你可以简单地通过对它们进行字符串比较来区分它们。如果您需要接受任意长度的输入,您还需要在字母符号中包含长度为1或2的字符串。例如,如果您对字符串aac进行编码,则需要中断这是符号aabacabaabaca

这有助于回答您的问题吗?我不太确定你在寻找什么,所以请随时编辑你的问题或在评论中回复,如果这还没有清除。

答案 1 :(得分:0)

思考的问题:短字符串和“块边界”的排列怎么样? 1和2个字符串怎么样?你只需将3,6,9,12,...字符计入输入文本中,然后在最后填充任何不均匀的长度吗?

如果块的大小可以变化,那么找到最合适的块会非常有趣。我怀疑它会退化成一个旅行推销员的问题,但也许这里有一个简洁的“定理”或其他工具。

也许尝试3个字符的所有排列,保存最常用的,然后尝试找出适合1和2个字符长的间隙?嗯,听起来它可能真的很慢,但可以使用某种递归的划分和计数方法:拉出长度为N的块长度,然后递归编码为长度为N - 1的间隙。

我担心的问题多于答案。