我已编写程序来获取每个char的代码,如程序输出中所示。
输入一些文字:nslfaslfjasfj text =“nslfaslfjasfj”
a:2
F:3
Y:2
1:2
N:1
S:3
霍夫曼算法 下面是“CHAR CODE”:
n代码:111
j code:110
f代码:10
代码:01
l code:001
代码:000
我的下一步应该是将上述内容存储在结构中并将其与原始文本=“nslfaslfjasfj”进行比较,以编码为“11101 ..... so on”。
我发现在结构中存储“CHAR CODE”时出现问题。它应该存储为字符串,如字符串s =“111”,然后存储在结构中吗?..提前感谢。
答案 0 :(得分:2)
通常,霍夫曼编码的目的是减少消息的长度,即压缩它。这意味着你想要写出位,而不是字符'0'和'1'。因此,将字符代码也存储为位是有意义的,并使用位操作将它们传输到流中。为每个元素存储一对(字符代码,代码长度)足以构造编码。
话虽如此,您可以按照建议使用字符串。这没有错,它可能会让它更容易调试,但它会表现得更差。
答案 1 :(得分:2)
你需要制作某种“BitWriter”。我们在我的大学lecture slides are freely available here的数据结构课程中讨论了Java中用于霍夫曼编码的按位I / O主题。显然是Java!= C,但概念是一样的。
答案 2 :(得分:1)
考虑到你正在尝试压缩某些东西,使用字符串将是一个可怕的想法。您需要将char代码存储为原始二进制文件。