从如下所示的文本文件开始:
a: 0
b: 100
c: 101
d: 11
0 0 100 100 11 101因此,这将解码:aabbdc
我能用什么解码算法来构建哈夫曼树,然后用它来解码消息呢?示例代码也将受到高度赞赏!
以下是我的想法:
然后,我可以再读一遍,让它在树上移动。当它击中一个空格时,我只会在它到达的叶子上返回字符?
发布于 2013-11-27 18:57:10
输入中没有/不应该有任何空格。你应该得到一些类似0010010011101的东西。
要创建树,对于每个字符,从根开始,对于每个位,如果是0,则向左转,如果是1,则向右转(在需要的地方创建节点)。当您到达某个字符的末尾时,将我们所在节点的值设置为该字符。
然后,遍历输入,从树中的根开始--按照上面的步骤执行,但是,不要创建节点,而是在到达叶子时停止,在该节点输出值,然后返回到根。
示例:
a = 0 --只需为根创建一个左子。
.
/
ab = 100 -右转( 1),然后左转( 0),然后再左转( 0)。
.
/ \
a .
/
.
/
bc = 101 -右转,左转,右转。
.
/ \
a .
/
.
/ \
b cd = 11 -右转,然后右转.
.
/ \
a .
/ \
. d
/ \
b c在处理输入00100时..。
从根部开始。
我们得到一个0,所以向左走。
我们得到一个值为a的叶子,所以输出它并返回到根。
我们得到一个0,所以向左走。
我们得到一个值为a的叶子,所以输出它并返回到根。
我们得到一个1,所以向右走。
我们得到一个0,所以向左走。
我们得到一个0,所以向左走。
我们得到一个值为b的叶子,所以输出它并返回到根。
https://stackoverflow.com/questions/20250688
复制相似问题