首先我们来看一个伪代码。这个是代表成绩的等级。

然后我们知道,每一次高考,学生的成绩分布应该接近某个比例,现在我们假如分别规律如下:

为此可以作出下面的这个树。

我们发现,概率分布主要是在70-79,80-89之间,如果有很多数据要比较,那么就要从60分开始比较,然后,分布最多的确是70-79,80-89的人,所以我们可以把树话成这样

现在先介绍几个概念:

路径长度:从树中一个结点到另一个结点之间的分支构成这两个结点的路径,路径上的分支数目叫路径长度。

树的路径长度:根结点到每个结点的路径长度和。

WPL(weight path length):树中所有叶子结点的带权路径之和。

比如上面那两个图,我们把他权重标号。如下图所示(为了方便,我们扩大10倍,避免小数点)

现在来看看WPL

WPL1=5*3+15*3+40*2+30*2+10*2=220

WPL2=5*1+15*+40*3+30*4+10*4=315。

现在给出一个概念:带权路径长度WPL最小的二叉树叫最优二叉树或赫夫曼树。

下面给出最优二叉树或赫夫曼树的画法。

规则如下:

1.在森林中选出两颗根结点的权值最小的二叉树。

2.合并两颗,增加一个新结点作为新二叉树的根,全职为左右孩子的权重之和。

3.再从未选中的结点中选择,小的放左边,大的放右边,然后重复,一直到结点没有了为止。

如下图所示:

6.6.1最优二叉树(赫夫曼树)相关推荐

  1. 最优二叉树(赫夫曼树)

    赫夫曼树的介绍(写的不好地方大佬请指教) 最优二叉树又称哈夫曼树,是带权路径最短的二叉树.根据节点的个数,权值的不同,最优二叉树的形状也不同. 图 6-34 是 3 棵最优二叉树的例子,它们共同的特点 ...

  2. 算法学习之最优二叉树(赫夫曼树)

    概念 给定n个权值作为n个叶子节点,构造一颗二叉树,若该数的代全路径长度(wpl)达到最小,称这样的的二叉树为最优二叉树,也成霍夫曼树 霍夫曼树是带权路径长度最短的树,权值较大的节点离根较近 路径和路 ...

  3. 【id:180】【20分】D. DS二叉树--赫夫曼树解码(不含代码框架)

    题目描述 已知赫夫曼编码算法和程序,在此基础上进行赫夫曼解码 在赫夫曼树的类定义中增加了一个公有方法: int  Decode(const string codestr, char txtstr[]) ...

  4. 【id:179】【20分】C. DS二叉树--赫夫曼树的构建与编码(不含代码框架)

    题目描述 给定n个权值,根据这些权值构造huffman树,并进行huffman编码 参考课本P147算法6.12 HuffmanCoding代码,注意数组访问是从位置1开始 要求:赫夫曼的构建中,默认 ...

  5. 最优二叉树——哈夫曼树

      一:什么是最优二叉树? 从我个人理解来说,最优二叉树就是从已给出的目标带权结点(单独的结点) 经过一种方式的组合形成一棵树.使树的权值最小. 最优二叉树是带权路径长度最短的二叉树.根据结点的个数, ...

  6. 最优二叉树-哈夫曼树

    关于最优二叉树, 一开始看书 , 做题 还是蒙的 后来多做几题大致就懂得了 , 百度百科给出的官方定义: 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最 ...

  7. 最优二叉树(哈夫曼树)

    哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的特点 哈夫曼编码 哈夫曼树的定义 例如: 哈夫曼树就是要构造一棵WPL最小的二叉树. 哈夫曼树的构造 哈夫曼树构造时,每次把权值最小的两颗二叉树合并 ...

  8. 算法系列之赫夫曼树的精解【构造流程及原理分析】

    赫夫曼树又称为最优树.最优二叉树 赫夫曼树百度百科 https://baike.baidu.com/item/%E5%93%88%E5%A4%AB%E6%9B%BC%E6%A0%91/2305769? ...

  9. 赫夫曼树的定义及原理

    参考<大话数据结构>        以学生成绩为例进行分析,正常的学生成绩的分布范围如下: 下面的图是普通的学生成绩判断,粗略的看什么问题,可是通常都认为,一张好的考卷应该是让学生的成绩大 ...

最新文章

  1. 机器学习、数据科学、人工智能、深度学习和统计学之间的区别!
  2. Android被忽略的tools
  3. HP ALM 使用经验
  4. 单元测试Junit 测试类与测试方法 java
  5. mysql分片库分页查询_Mysql分库分表
  6. 并行算法第三讲:稠密矩阵乘法
  7. 1.2. MariaDB
  8. 在PyCharm中自动添加文件头、时间日期等信息
  9. SqlServer中union 和 union all的区别
  10. linux shell su root失败
  11. SQL Server Compact 数据库内容查看工具
  12. Android 学生管理系统
  13. 基于51单片机GPS的导航系统设计(1)---(设计思路)
  14. 一定要收藏,一位百万年薪Python程序员手写资料(附实例分享)
  15. .NET Core 2.2 IIS网站出现HTTP503无法访问解决方法
  16. 2-SAT问题的一种解法(简明易懂)
  17. 2016年4月计算机基础,2016年4月份计算机应用基础统考模拟试题.docx
  18. magento bug|美国时间冬令时夏令时变更导致后台订单统计出现异常
  19. Linux中more命令的使用,Linux中more命令使用详解教程
  20. vector容量和大小

热门文章

  1. Java华丽转身 —— GUI编程宝典
  2. 今天的我坐下来的蜡笔小新
  3. p2psearcher怎么用
  4. 微博中的c++议论触发了测试人员的神经
  5. JAVASCRIPT干了不下四五种工作
  6. 第十八节:教你如何使用ES6的Promise对象
  7. php字节怎么转化成字符串,php将utf-8(3字节)字符串转换成字节
  8. thinkpad卡在logo界面_四大系列 一个品牌,超好用的商务伴侣Thinkpad
  9. ubuntu下安装django
  10. After Keying for mac(AE头发细节优化还原抠像脚本)v1.04