`
mywebcode
  • 浏览: 994710 次
文章分类
社区版块
存档分类
最新评论

最优二叉树(哈夫曼树)知识点

 
阅读更多

路径:在一棵树中从一个结点往下到孩子或孙子结点之间的通路

结点的路径长度:从根节点到该节点的路径上分支的数目

树的路径长度:树中每个结点的路径长度之和

结点的权:给树中的结点赋予一个某种含义的值,则该值为该节点的权

结点的带权路径长度:结点的路径长度乘以结点的权

树的带权路径长度(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

哈夫曼树在编码中的应用:

在通讯中,经常需要将文本转换成二进制串,即编码。为了使电文代码尽可能的短,需要另经常使用的字符采用短的编码,使用频率小的字符采用长的编码。同时,一个字符的编码不能包含另一个字符的编码,例如A00B就不能是001,使用哈夫曼树就可以很好的实现 ,

例如A,B,C,D,E的频率分别是6,7,2,5,9对应的哈夫曼树为:

另左子树的路径为0,右子树路径为1

A:00 B:01 C:100 D:101 E:11

分享到:
评论

相关推荐

    数据结构课程设计 哈弗曼压缩+纸牌游戏

    哈夫曼编码就是利用这一点,以字符作为叶子结点,以其频率作为权值,建立最优二叉树。 一 下面先重点讨论一下建立哈夫曼数的算法。哈夫曼算法: 根据给定叶子结点及其权值(这里即字符及其频率)构成二叉树的集合,...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    我国平均每30人、知识分子每1.5人就拥有1本谭浩强教授编著的书。(3)他和别人合作编著的《BASIC语言》发行了1200万册,创科技书籍发行量的世界纪录。此外,他编著的《C程序设计》发行了600万册。他曾在中央电视台...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    我国平均每30人、知识分子每1.5人就拥有1本谭浩强教授编著的书。(3)他和别人合作编著的《BASIC语言》发行了1200万册,创科技书籍发行量的世界纪录。此外,他编著的《C程序设计》发行了600万册。他曾在中央电视台...

    数据结构与算法分析_Java_语言描述

    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 实现 ...

    数据结构与算法分析Java语言描述(第二版)

    算法设计技巧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 动态规划...

    数据结构与算法分析-Java语言描述(第2版)_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 例子...

    数据结构与算法分析-Java语言描述(第2版)_1_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 例子...

    数据结构与算法分析_Java语言描述(第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 动态规划...

    数据结构与算法分析 Java语言描述第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 动态规划...

    数据结构与算法分析_Java语言描述(第2版)

    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章 摊还分析 ...

Global site tag (gtag.js) - Google Analytics