主题:[讨论]数据结构臭作--huffman编码解码(2进制形式)
sarrow
[专家分:35660] 发布于 2006-11-14 17:20:00
以为huffman压缩很好写,所以编了一个,发现有问题!
程序能够比较好的编码/解码,但是,由于我是用二进制读写的,而huffman 编码长度不能保证是8的整数倍,所以实际写入文件的有效的编码是n个byte外加0到7个bits;那么最后再解码的时候,最后一个字节的多余的若干bits的信息就有可能造成多余的字符被解出来...
这么说吧,比如空格比较多,其编码是'00',而我最后多余了7个bits的信息,且每位都是'0',那么在解码的时候,就会多解出3个空格出来!
望哪位高手可以帮我解决这个问题!
(程序的编排有些乱,大家就将就一下吧,抱歉了!)
回复列表 (共19个回复)
11 楼
冷月星光 [专家分:16520] 发布于 2006-04-07 20:24:00
太强了
12 楼
holanbell [专家分:30] 发布于 2006-04-07 23:31:00
最后多余的用一个长度大于7的编码的前若干位补齐,这样最后一次解码时走不到叶子,得不到解码,没有多余输出,不知道这样行不行?
13 楼
sarrow [专家分:35660] 发布于 2006-04-07 23:54:00
holanbell
感谢,这就是我想要的!
14 楼
rickone [专家分:15390] 发布于 2006-04-07 23:54:00
嘿~楼主还有版主,我把这个帖子做个链接到‘数据结构与算法’版里,可以吧~~
谢谢提供啊。
15 楼
euc [专家分:4310] 发布于 2006-04-16 21:24:00
在文件头建一个块,记录冗余的bit数。
16 楼
keneth008 [专家分:70] 发布于 2006-05-16 00:54:00
暂时看不懂...真希望能插上话啊
17 楼
猫儿cat [专家分:0] 发布于 2006-11-14 09:37:00
太厉害了
18 楼
germylure [专家分:350] 发布于 2006-11-16 15:06:00
[quote]最后多余的用一个长度大于7的编码的前若干位补齐,这样最后一次解码时走不到叶子,得不到解码,没有多余输出,不知道这样行不行?[/quote]
可能可以实现,但总感觉不是很安全...
楼主可以考虑将结束符与要编码的一起编码,文件末加结束符号,多余的随便加入即可,解码到结束符就结束不在输出!,这样不是更安全,还可以用于其他用途!
19 楼
sarrow [专家分:35660] 发布于 2006-11-16 15:08:00
[quote]可能可以实现,但总感觉不是很安全...
楼主可以考虑将结束符与要编码的一起编码,文件末加结束符号,多余的随便加入即可,解码到结束符就结束不在输出!,这样不是更安全,还可以用于其他用途!
[/quote]
good!
我来回复