再谈哈夫曼树之字符串编码
今天做了某公司的一道算法题,是构建aaaabbbccd的哈夫曼树,并写出最后编码的二进制串。当时就想,哈夫曼树而已啊,我才写了一篇博客啊。。。。搞起!结果,越搞越感觉不对劲。。。。。。。
问题所在是我把字符的阿斯克吗当成霍夫曼树的构架基础,其实应该是频次、频次、频次!!!!
重新做一下题:
1. 统计字符的频次
字符 | a | b | c | d |
---|---|---|---|---|
频次 | 4 | 3 | 2 | 1 |
2.构建哈夫曼树
如何构建哈夫曼树?见这篇:https://blog.csdn.net/dyingstraw/article/details/88093064
cdba:10
cdb:6 a:4
cd:3 b:3
c:2 d:1
3.构建字典
树的左侧边是0,右侧边是1:则得出编码置换表:
字符 | a | b | c | d |
---|---|---|---|---|
编码 | 1 | 01 | 000 | 001 |
4. 重新组合压缩后的字符串
则源字符串被压缩为:
1111 0101 0100 0000 001
不难看出,压缩后的二进制占用3个字节的存储空间(不包含字典),源字符串占用11个字节存储空间。
java算法:
// 待完善