Android版数据结构与算法(七):赫夫曼树 (2)

比如我们有一段文字"EDEFABAC..."要进行网络传输,一般我们都会选择二进制方式传输,这段文字只包含6个字母:ABCDEF,那么用二进制表示每个字母需要用3位表示,如图:

字母   A   B   C   D   E   F  
二进制表示   000   001   010   011   100   101  

这段文字中各字母出现频率分别为A 20, B 10, C 15, D 15, E 25, F 15,正好100%。

这样就可以按照赫夫曼树思想来重新规划各个字母的编码,频率即是各个字母的权重,构建赫夫曼树, 并且将左孩子权重改为0,右孩子改为1,得到下图:

Android版数据结构与算法(七):赫夫曼树

然后我们对各个字母重新编码,编码规则为:从根结点到叶子结点经过路径的0和1来编码,重新编码后如下:

字母   A   B   C   D   E   F  
二进制表示   10   11110   11111   1110   0   110  

将"EDEFABAC"这段文字进行编码的前后比较:

原编码:100011100101000001000010 (24个字符) 

新编码:01110011010111101011111        (23个字符)

编码后数据被压缩了,这里大家可以觉得才减少一个字符啊,实际情况不可能只有这几个字符的,一个文本会包含很多的字符,这样就可以被压缩很多空间,更利于数据的传输。

 五、总结

以上介绍了赫夫曼树以及其使用场景之一(数据的压缩),赫夫曼树原理还有很多其余用处,学习赫夫曼树更多的是要体会其思想,好了,本篇到此为止,下一篇二叉排序树的介绍以及java代码的实现。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyzyg.html