路径:在一棵树中从一个结点往下到孩子或孙子结点之间的通路
结点的路径长度:从根节点到该节点的路径上分支的数目
树的路径长度:树中每个结点的路径长度之和
结点的权:给树中的结点赋予一个某种含义的值,则该值为该节点的权
结点的带权路径长度:结点的路径长度乘以结点的权
树的带权路径长度(WPL):树中所有叶子结点的带权路径长度 (Weight Path Length)
最优二叉树(哈夫曼树):带权路径长度最小的二叉树
构造哈夫曼树:
给定n个权值{w1,w2,…wn},则构造出的哈夫曼树有n个叶子结点,构造过程如下:
1.
将w1,w2…wn按从小到大排序,并将他们看做n棵只有一个结点的树组成的森林;
2.
选出两个根节点权值最小的树合并,作为新树的左右子树,新树的根节点权值是左右子树根节点权值之和
3.
从森林中删除选取的两棵树,将新树加入森林
4.
重复2,3,直到只剩一棵树,所得即为最优二叉树
实例如下:给定权值{5,6,2,7,9}构造哈夫曼树
解:(1)排序后为w={2,5,6,7,9}
取出2,5w={6,7,7,9}
取出6,7w={7,9,13}
取出7,9
w={13,16}
取出13,16
上面的哈夫曼树的wpl=6X2+7X2+2X3+5X3+9X2=65
哈夫曼树在编码中的应用:
在通讯中,经常需要将文本转换成二进制串,即编码。为了使电文代码尽可能的短,需要另经常使用的字符采用短的编码,使用频率小的字符采用长的编码。同时,一个字符的编码不能包含另一个字符的编码,例如A是00,B就不能是001,使用哈夫曼树就可以很好的实现
,
例如A,B,C,D,E的频率分别是6,7,2,5,9对应的哈夫曼树为:
另左子树的路径为0,右子树路径为1
则A:00 B:01 C:100 D:101 E:11
分享到:
相关推荐
哈夫曼编码就是利用这一点,以字符作为叶子结点,以其频率作为权值,建立最优二叉树。 一 下面先重点讨论一下建立哈夫曼数的算法。哈夫曼算法: 根据给定叶子结点及其权值(这里即字符及其频率)构成二叉树的集合,...
我国平均每30人、知识分子每1.5人就拥有1本谭浩强教授编著的书。(3)他和别人合作编著的《BASIC语言》发行了1200万册,创科技书籍发行量的世界纪录。此外,他编著的《C程序设计》发行了600万册。他曾在中央电视台...
我国平均每30人、知识分子每1.5人就拥有1本谭浩强教授编著的书。(3)他和别人合作编著的《BASIC语言》发行了1200万册,创科技书籍发行量的世界纪录。此外,他编著的《C程序设计》发行了600万册。他曾在中央电视台...
3.3.2 栈的实现 3.3.3 应用 3.4 队列ADT 3.4.1 队列模型 3.4.2 队列的数组实现 3.4.3 队列的应用 小结 练习 第4章 树 4.1 预备知识 4.1.1 树的实现 4.1.2 树的遍历及应用 4.2 二叉树 4.2.1 实现 ...
算法设计技巧10.1 贪婪算法10.1.1 一个简单的调度问题10.1.2 哈夫曼编码10.1.3 近似装箱问题10.2 分治算法10.2.1 分治算法的运行时间10.2.2 最近点问题10.2.3 选择问题10.2.4 一些算术问题的理论改进10.3 动态规划...
3.6.3 应用 3.7 队列adt 3.7.1 队列模型 3.7.2 队列的数组实现 3.7.3 队列的应用 小结 练习第4章 树 4.1 预备知识 4.1.1 树的实现 4.1.2 树的遍历及应用 4.2 二叉树 4.2.1 实现 4.2.2 例子...
3.6.3 应用 3.7 队列adt 3.7.1 队列模型 3.7.2 队列的数组实现 3.7.3 队列的应用 小结 练习第4章 树 4.1 预备知识 4.1.1 树的实现 4.1.2 树的遍历及应用 4.2 二叉树 4.2.1 实现 4.2.2 例子...
算法设计技巧10.1 贪婪算法10.1.1 一个简单的调度问题10.1.2 哈夫曼编码10.1.3 近似装箱问题10.2 分治算法10.2.1 分治算法的运行时间10.2.2 最近点问题10.2.3 选择问题10.2.4 一些算术问题的理论改进10.3 动态规划...
算法设计技巧10.1 贪婪算法10.1.1 一个简单的调度问题10.1.2 哈夫曼编码10.1.3 近似装箱问题10.2 分治算法10.2.1 分治算法的运行时间10.2.2 最近点问题10.2.3 选择问题10.2.4 一些算术问题的理论改进10.3 动态规划...
10.3.3 最优二叉查找树 10.3.4 所有点对最短路径 10.4 随机化算法 10.4.1 随机数发生器 10.4.2 跳跃表 10.4.3 素性测试 10.5 回溯算法 10.5.1 收费公路重建问题 10.5.2 博弈 小结 练习 参考文献 第11章 摊还分析 ...