我有这个功课:找到任何给定字母表中符号的代码字。它说我必须在三个符号组上使用二进制霍夫曼。这究竟是什么意思?我在[alphabet] ^ 3上使用常规的霍夫曼吗?如果是这样,我如何区分组中的3个符号?
答案 0 :(得分:1)
我无法说清楚,因为你对这个问题的描述并不是那么详细,但我猜它们的意思是不是单独编码你的字母表中的每个符号,而是应该对每一个符号进行三次编码作为一个群体。
因此,例如,如果您的字母表由a
,b
和c
组成,而不是为每个字母单独生成编码,那么您将为{创建编码{1}},aaa
,aab
等。这些字符串中的每一个都将被视为霍夫曼算法中的单独符号;你可以简单地通过对它们进行字符串比较来区分它们。如果您需要接受任意长度的输入,您还需要在字母符号中包含长度为1或2的字符串。例如,如果您对字符串aac
进行编码,则需要中断这是符号aabacab
,aab
和aca
。
这有助于回答您的问题吗?我不太确定你在寻找什么,所以请随时编辑你的问题或在评论中回复,如果这还没有清除。
答案 1 :(得分:0)
思考的问题:短字符串和“块边界”的排列怎么样? 1和2个字符串怎么样?你只需将3,6,9,12,...字符计入输入文本中,然后在最后填充任何不均匀的长度吗?
如果块的大小可以变化,那么找到最合适的块会非常有趣。我怀疑它会退化成一个旅行推销员的问题,但也许这里有一个简洁的“定理”或其他工具。
也许尝试3个字符的所有排列,保存最常用的,然后尝试找出适合1和2个字符长的间隙?嗯,听起来它可能真的很慢,但可以使用某种递归的划分和计数方法:拉出长度为N的块长度,然后递归编码为长度为N - 1的间隙。
我担心的问题多于答案。