优先队列实现哈弗曼最小权值
来源:互联网 发布:php开发网站兼容问题 编辑:程序博客网 时间:2024/06/05 21:39
建立哈弗曼树要求我们每次都选频率权值最小的点构成节点,即权值小的点在树的深处,权值大的点在树的浅处,根据节点选择的特点,我们可以把节点的值放在优先队列中,包括新形成的节点。
我们先定义优先队列的优先级别。
1 struct cmp2 {3 bool operator()(const int &a,const int &b)4 {5 return a>b;6 }7 };//最小值优先出队
然后就是实现的整个程序。
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<queue>#define maxn 50050using namespace std;struct cmp{ bool operator()(const int &a,const int &b) { return a>b; }};int main(){ int n; while(scanf("%d",&n)!=EOF) { int x; priority_queue<int,vector<int>,cmp>q; for(int i=0;i<n;i++) { scanf("%d",&x); q.push(x); } __int64 sum=0; while(q.size()!=1) { int a=q.top(); q.pop(); int b=q.top(); q.pop(); sum+=a+b; q.push(a+b); } printf("%I64d\n",sum); } return 0;}
练习题链接
http://www.51nod.com/onlineJudge/questionCode.html#problemId=1117¬iceId=19046
0 0
- 优先队列实现哈弗曼最小权值
- 最小优先队列--堆实现
- 最小堆优先队列C++实现
- 最小优先队列实现赫夫曼树 贪心策略
- 用最小堆实现优先队列
- 数据结构实现之最小索引优先队列
- 简单优先队列实现-基于最小堆
- 数据结构实现之最小优先队列(最小堆)
- 最小优先队列+prim
- 最大最小优先队列
- 常用类之三----最小堆实现优先队列
- Hdoj 1509 -Windows Message Queue 优先队列最小堆实现
- 最小堆 / 优先队列(C语言实现)
- min heap priority queue 最小堆实现的优先队列
- 最小对/优先队列(C语言实现)
- c语言最小堆的实现-优先队列
- 最小堆实现优先队列解决修理牧场(c/c++)
- poj1789之最小优先队列
- Joke with permutation 分类: ACM 2015-08-03 14:09 1
- Judging Troubles (multiset查找) 分类: ACM STL
- Cent Savings (DP) 分类: ACM dp 2015-08-0
- 背包问题------ 分类: ACM 2015-08-03 20:57 1人阅读 评论(0
- 最小生成树 克鲁斯卡尔(Kruskal)算法求最小生成树
- 优先队列实现哈弗曼最小权值
- 二维hash(Uva 12886)
- Concert Tour(Uvalive 6853)
- ACM数论中的常见的模板和结论
- 1279 扔盘子(51nod)
- 1278 相离的圆(51nod)
- Sum(构造,枚举)
- Wheels(bfs遍历,CERC 2014)
- 最长回文字串(hdu 3068)