从一个如下所示的文本文件开始:
a: 0
b: 100
c: 101
d: 11
0 0 100 100 11 101
所以这会解码:aabbdc
我可以使用哪种解码算法构建一个Huffman树然后用它来解码消息?示例代码也将受到高度赞赏!
这就是我的想法:
然后,我可以再次阅读每一位并让它在树中移动。当它到达一个空间时,我会在它到达的叶子处返回角色?
答案 0 :(得分:2)
输入中没有/不应该有任何空格。你应该得到类似0010010011101
的东西。
要创建树,请从每个字符开始,对于每个位,如果它是0
则向左移动,如果是1
则向右移动(在需要时创建节点) 。当您到达某个字符的末尾时,请将我们所在节点的值设置为该字符。
然后,从树中的根开始查看输入 - 执行与上面相同的操作,但是,而不是创建节点,只需在到达叶子时停止,在该节点输出值并返回到根
示例:强>
a = 0
- 只需为根创建一个左子项。
.
/
a
b = 100
- 向右移动(对于1
),然后向左移动(对于0
),然后再向左移动(对于0
)。
.
/ \
a .
/
.
/
b
c = 101
- 向右走,然后向左走,然后向右走。
.
/ \
a .
/
.
/ \
b c
d = 11
- 向右走,然后向右走。
.
/ \
a .
/ \
. d
/ \
b c
处理输入00100
...
从根开始。
我们得到0
,所以请左转
我们得到一个值为a
的叶子,所以输出它并返回到根。
我们得到0
,所以请左转
我们得到一个值为a
的叶子,所以输出它并返回到根。
我们得到1
,所以走吧
我们得到0
,所以请左转
我们得到0
,所以请左转
我们得到一个值为b
的叶子,所以输出它并返回到根。