//哈夫曼树的带权路径长度
//总结
//法一:①先对权值从小到大排序。
//②选两个最小的加起来成为一个新结点,而这两个最小的值是新结点的左右子结点。
//③两个老的结点去掉,新的结点放入再次排序然后重复过程②。
//④直到完全生成一棵树。
//⑤计算的时候,只计算那些初始权值里面有的值,把它乘以深度
//(和传统说的深度不一样,是传统说的深度减一)加起来就是路径长度。

//法二:哈夫曼树也可以通过小根堆实现。小根堆每次弹出两个值,然后将二者的和再插入小根堆中。

//vs2017
//哈夫曼树的带权路径长度
//总结
//法一:①先对权值从小到大排序。
//②选两个最小的加起来成为一个新结点,而这两个最小的值是新结点的左右子结点。
//③两个老的结点去掉,新的结点放入再次排序然后重复过程②。
//④直到完全生成一棵树。
//⑤计算的时候,只计算那些初始权值里面有的值,把它乘以深度
//(和传统说的深度不一样,是传统说的深度减一)加起来就是路径长度。//法二:哈夫曼树也可以通过小根堆实现。小根堆每次弹出两个值,然后将二者的和再插入小根堆中。
#include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
int main()
{int n;while (cin >> n){priority_queue<int, vector<int>, greater<int>> pq;//定义小根堆pqint num;for (int i = 0; i < n; i++){cin >> num;pq.push(num);}int sum = 0;while (pq.size() > 1)//除了哈夫曼树最顶部元素,其他所有元素累加即为wpl{int num1 = pq.top();pq.pop();int num2 = pq.top();pq.pop();sum += (num1 + num2);pq.push(num1 + num2);}cout << sum << endl;}return 0;
}

哈夫曼树的带权路径长度总结wpl相关推荐

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

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

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

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

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

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

  4. 哈夫曼树与带权路径长度

    问题: 权值分别为从19,21,2,3,6,7,10,32的结点,构造一棵哈夫曼树,该树的带权路径长度是? 哈夫曼树的一个应用: 压缩字符串https://blog.csdn.net/dyingstr ...

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

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

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

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

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

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

  8. 哈夫曼树的带权路径长度(C++优先队列实现)

    哈夫曼树 题目描述 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和的最小值. ...

  9. 【哈夫曼树】带权路径长度WPL

    题目描述 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和. 输入 输入有多组 ...

最新文章

  1. R语言dplyr包all_equal函数检查多个dataframe是否相同实战
  2. 在人工智能时代,我们更需要理解自己的智能 | 艾伦脑科学研究所所长克里斯托夫·科赫STEP峰会演讲实录
  3. (linux)查看及修改文件权限以及相关
  4. 20180313分块查找
  5. Python标准库07 信号 (signal包,部分os包)
  6. 机器学习(二十三)——Beam Search, NLP机器翻译常用评价度量, 模型驱动 vs 数据驱动
  7. ios中关于delegate(委托)的使用心得
  8. 单行 - JAVA 条件表达式
  9. Vue中watch的使用
  10. MTV模型—urls和view
  11. 计算机与机械制图课题研究,计算机辅助技术和机械制图融合教学改革探索和实践.doc...
  12. 小程序input获得焦点触发_小程序文本框焦点 小程序input自动获取焦点
  13. Linux驱动中私有数据filp-private_data的作用
  14. PAT A1008 Elevator
  15. 微信分享按钮隐藏、显示问题和注意事项
  16. Arranging Coins 排列硬币
  17. 安卓游戏开发一(超级玛丽)
  18. java考试真题6_JAVA认证考试历年真题:SCJP认证试题解析6
  19. ArcGIS API For Javascript 4.15 绘制地图:在地图上绘制点和面
  20. 关于SurfaceView

热门文章

  1. python endif_如何使用自定义语言获取if语句的“ENDIF”字符串的下一个实例
  2. 行业领先生物制药企业在冷链物流运输中采用虹科LIBERO温度记录解决方案
  3. 局域网唤醒(WOL)与远程唤醒教程
  4. Nature子刊:三代Nanopore测序检测细菌和菌群多种DNA甲基化类型的新方法
  5. 【第4期-智能驾驶汽车系列术语概念解析】第2节:基于三点求外接圆的曲率计算方法
  6. 为什么我们决定重构 Uber 司机端
  7. Ubuntu16.04运行ORB_SLAM2流程及出现问题总结
  8. 电商创业项目:如何打造一个成功的电商平台
  9. 龙族幻想微信一区哪个服务器人多,龙族幻想微信一区-命运之刃开服时间表_龙族幻想新区开服预告_第一手游网手游开服表...
  10. 文心一言,中文版AI正在崛起吗?