哈夫曼树
哈夫曼树(Huffman Tree)也是一种特殊的二叉树,这种树的所有叶子结点都带有权值,从中构造出带权路径长度最短的二叉树,即哈夫曼树。
哈夫曼树的定义
设二叉树具有n个带权值的叶子结点,那么从根结点到各个叶子结点的路径长度与相应结点权值的乘积的和,叫做二叉树的带权路径长度,记作:
其中,为第i个叶子结点的权值,l为第i个叶子结点的路径长度。如图6.19所示的二叉树, 它的带权路径长度值WPL=1×3+3×3+2×2+4×1=20
![bb8880d120244219e5f039bbba3cd9eb.png](https://i-blog.csdnimg.cn/blog_migrate/544d5492929785ea1b953aa1a251a47c.jpeg)
如果给定一组具有确定权值的叶子结点· 可以构造出不同的带权二叉树, 它们的带权路径长度并不相同· 我们把其中具有最小带权路径长度的二叉树称为哈夫曼树·.
![63cee22c192bb64207e13cbbeb65bc94.png](https://i-blog.csdnimg.cn/blog_migrate/7c78d398222d5e5bf061c0f684e4ee9a.jpeg)
哈夫曼树的构造
![fc1bbae44cc2bc8a44e2e3437d969e44.gif](https://i-blog.csdnimg.cn/blog_migrate/621b5848420df54443678f597d54f894.gif)
哈夫曼编码
哈夫曼编码具有广泛的应用, 利用哈夫曼树构造的用于通信的二进制编码称为哈夫曼编码。例如: 有一段电文“ CAST囗TAT囗A囗SA "( 其中,“ 囗” 表示一个空格) 。统计电文中字母的频度 f('C')=1,f('S')=2,f('T')=3,f('囗')=3,f('A')=4 。
用频度{ 1 , 2 , 3 , 3 , 4 } 为权值生成哈夫曼树. 并在每个叶子上注明对应的字符。树中从根到每个叶子都有一条路径, 对路径上的各分枝约定指向左子树根的分枝表示“ 0 ” 码, 指向右子树的分枝表示“ 1 ” 码, 取每条路径上的“ 0 ” 或“ 1 ” 的序列作为和各个叶子对应的字符的编码, 这就是哈夫曼编码。对应图6- 22 的哈夫曼树,上述字符编码为:
![a6484af7af5397b4b80e6923cbac136f.png](https://i-blog.csdnimg.cn/blog_migrate/14786a026a41f0fcb25ad0fd7486490a.jpeg)
![8cc4060204871663ffe344dc91e41986.png](https://i-blog.csdnimg.cn/blog_migrate/09081eab81325861886cb27996ed6bea.jpeg)
编码过程:
![592613d5ac1332b1f8034d0ab2c80109.gif](https://i-blog.csdnimg.cn/blog_migrate/3e3ccdeceaa31ac21235b593e8f13ae4.gif)
信源熵
在信息论中,熵