再谈哈夫曼树之字符串编码

今天做了某公司的一道算法题,是构建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算法:

// 待完善

 

posted @ 2019-03-12 22:36  dyigstraw  阅读(399)  评论(0编辑  收藏  举报
foot