哈夫曼树和哈夫曼编码
来源:互联网 发布:怎么在u盘中装ubuntu 编辑:程序博客网 时间:2024/06/09 22:58
原文参照:http://blog.csdn.net/bruce_6/article/details/38656413
1.基本概念
节点之间的路径长度:在树中从一个结点到另一个结点所经历的分支,构成了这两个结点间的路径上的经过的分支数称为它的路径长度
树的路径长度:从树的根节点到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。
结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。
结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。
树的带权路径长度(Weighted Path Length of Tree:WPL):定义为树中所有叶子结点的带权路径长度之和
最优二叉树是带权路径长度最短的二叉树
WPL=7*1+5*2+2*3+4*3=35
2.构造哈夫曼树的思路
1)给定n个权值分别为{w1,w2,w3,……}的二叉树{T1,T2,T3,……},其中每棵二叉树只有一个权值为wi 的根节点,其左右子树都为空;
2)从森林中取出两棵根节点的权值最小的二叉树,作为一棵新的二叉树的左右子树,且令新的二叉树的根节点的权值为其左右子树的权值和;
3)从F中删除被选中的那两棵子树,并且把构成的新的二叉树加到F森林中
4)重复2 ,3 操作,直到森林只含有一棵二叉树为止,此时得到的这棵二叉树就是哈夫曼树
3.哈夫曼编码
对一串报文abcdabcaba”进行编码,可以先统计出a、b、c、d4个字符,出现次数分别为4、3、2、1
将a、b、c、d以出现次数为权值构造哈夫曼树
从哈夫曼树根节点开始,对左子树分配代码“0”,对右子树分配“1”,一直到达叶子节点。
如图:
a、b、c、d的编码分别为0、10、110、111
报文“abcdabcaba”转换为对应的二进制码就是0101101110101100100,这就是哈夫曼编码
0 0
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 最优二叉树--哈夫曼树和最优前缀编码--哈夫曼编码
- c实现哈夫曼树和哈夫曼编码
- java创建哈夫曼树和实现哈夫曼编码
- 带你入门哈夫曼编码和哈夫曼树
- 哈夫曼树的建立和哈夫曼编码
- 哈夫曼树和哈夫曼树编码
- iScroll5 API速查随记
- Android WebView使用基础
- MYSQL '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
- 对Map集合的遍历
- 虚函数与多态性
- 哈夫曼树和哈夫曼编码
- Mybatis之实现分页
- SVD & PCA
- Binary Tree Level Order Traversal
- throw throws 区别
- HDU1022——Train Problem I(栈 stack)
- SGU 106 The equation(扩欧)
- UVA - 11039 Building designing
- 计算思维实践之路(五)