哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明。

它们的带权路径长度分别为:

图a: WPL=5*2+7*2+2*2+13*2=54

图b: WPL=5*3+2*3+7*2+13*1=48

可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树(也称为最优二叉树)。

哈夫曼树构建教程

例:对于给定的一组权值w={1,4,9,16,25,36,49,64,81,100},构造具有最小带权外部路径长度的扩充二叉树,并求出他的的带权外部路径长度。

解:1、首先我们对这一组数字进行排序。规则是从小到大排列(题目已排序好)。

2、在这些数中 选择两个最小的数字(哈夫曼树是从下往上排列的)写在纸上。如下图所示

3、用一个类似于树杈的“树枝”连接上两个最小的数。在顶点处计算出这两个数字的和 并写在上面。然后再比较剩下的数字和这个和的大小,再取出两个最小的数字进行排列

4、如上图中30,25的和为55,已经大于36,49.所以这个时候开始有分支,用36,49再构造一个分支,如下图。

5、最后将分支合并成一个二叉树,如下图

6、这样,二叉树结构就构建好了。

带权外部路径长度计算;

WPL=2*100 + 3*64 + 2*81 + 4*25 + 2*49 + 2*36 + 5*16 + 6*9 + 7*1 + 7*4 =993

(385的权重为0,216和166权重为1.....)

左0右1:哈夫曼编码为:

哈夫曼编码和带权路径计算相关推荐

  1. 哈夫曼树的构建、编码以及带权路径长计算

    给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离根较 ...

  2. 给定结点权值,求哈夫曼树的带权路径长度和

    1.哈夫曼树概念 一棵树中,从任意一个结点到达另一个结点的通路叫做路径,该路径包含的边的个数称为路径长度,每个结点带有的表示某种意义的值成为权值.从根结点到叶子结点的路径长度乘以叶子节点权值,得到的值 ...

  3. 哈夫曼树的带权路径长度和

    正常想要计算哈夫曼树的路径长度之和,是遍历一遍树,将叶结点的权值乘上深度再加和. 那么对于路径和的计算有这样一个公式: 哈夫曼树的带权路径长度和=等于所有非叶节点的权值和 所以说我们只需要每次将数组前 ...

  4. 自动计算哈夫曼树的带权路径长度

    C语言自动计算哈夫曼树的带权路径长度: #include<stdio.h> #include<stdlib.h> int cmp(const void *a,const voi ...

  5. 哈夫曼树的带权路径长度总结wpl

    //哈夫曼树的带权路径长度 //总结 //法一:①先对权值从小到大排序. //②选两个最小的加起来成为一个新结点,而这两个最小的值是新结点的左右子结点. //③两个老的结点去掉,新的结点放入再次排序然 ...

  6. 算法学习笔记——数据结构:哈夫曼树、带权路径长度WPL、哈夫曼编码

    引入 合并果子问题如下: 有n堆果子,每次可以合并任意两堆果子,耗费体力值为[两堆果子数之和],最终在n-1次合并后,得到一堆果子. 给出合并的方案,使得耗费的体力值最小 例如有3堆果子,质量依次为1 ...

  7. 【数据结构-N】哈夫曼树带权路径计算

    那个闪闪发光的人 会在某一天的雨后,不经意地出现在你的迷茫路口. 目录: 哈夫曼树的构建 带权路径长度计算 >>构建 哈夫曼树,又称最优二叉树,是一类带权路径长度最短的树. 构建哈夫曼树的 ...

  8. 哈夫曼树(带权路径长度+树的带权路径长度+哈夫曼树定义+构造哈夫曼树+哈夫曼树性质+哈夫曼编码+计算平均码长-这里指WPL)

    带权路径长度 树的带权路径长度WPL 哈夫曼树 哈夫曼树构造 哈夫曼树性质 哈夫曼编码 固定长度编码 可变长编码 前缀编码 固定长度编码.可变长编码.前缀编码.哈夫曼编码 思维倒图 试题

  9. 每天一道数据结构练习题(给定权值求出哈夫曼树的带权路径长度)

    名词解释: 带权路径长度也就是树的带权路径长度,树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 结点的权:在一些应用中,赋予树中结点的一个有某种 ...

最新文章

  1. 2.本征矩阵 基本矩阵以及对极几何之间的约束关系
  2. linux权限切换命令,Linux基础常用命令汇总(权限操作)
  3. Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor...
  4. C++之整理一些最近看书的收获
  5. python处理滑块验证码_使用python实现滑动验证码
  6. Visual C++ 2008入门经典 第九章类的继承和虚函数(二)
  7. Spring-BeanPostProcessor的执行顺序
  8. 记录This request has been blocked; the content must be served over HTTPS.
  9. CROSS APPLY和OUTER APPLY的区别
  10. 计算机二本院校排名民办河北,2020年河北民办二本大学及分数线-河北最好的民办大学学费...
  11. 用c语言编程,统计大写字母,小写字母,数字,其他字符的个数,用C语言:输入一行字符,不超过50个,统计出其中英文大写字母,小写字母,数字,空格以及其他字符个数...
  12. 解决Office安装错误代码1024:安装程序无法打开注册表项UNKNOWN\Components\
  13. 【TFT屏幕】1.44寸彩屏
  14. Java利用JNA调用C#的dll
  15. linux如何修改当前时间
  16. Python批量处理jpg转换为bmp图片,告别手动转换,真爽,
  17. CCPC2018 桂林 D Bits Reverse
  18. Device Orientation——设备方向
  19. 【LeetCode】463. 岛屿的周长
  20. 开源的php网站程序,免费PHP开源CMS网站程序

热门文章

  1. 中科院C语言应聘机试编程题6,中科院计算所保研笔试+机试+面试经验分享
  2. golang 大数据平台_大数据平台是什么?有哪些功能?如何搭建大数据平台?
  3. 上证50基金有哪些_定投基金(易方达上证50指数A)
  4. mac同步linux文件夹在哪里设置,Linux和Mac上的一些特殊文件将不再同步
  5. 巨一自动化工业机器人_工业机器人和自动化设备连接器
  6. 图形显卡_选核芯显卡还是独立显卡?这才是决定笔记本电脑性能的关键
  7. Spring Boot 实用开发技巧————Eclipse 远程调试
  8. 深入理解Tomcat和Jetty源码之第三篇tomcat系统架构上:连接器是如何设计的
  9. php用json_encode编码后乱码,php json_encode()函数中文编码乱码解决方法_PHP教程
  10. 创建物化视图commit_oracle慎用基于on commit刷新物化视图的方式(一)