优先队列的STL运用与哈夫曼树的实现
来源:互联网 发布:网络被运营商劫持举报 编辑:程序博客网 时间:2024/05/21 08:40
priority_queue是优先队列,简称堆,哈夫曼树的实现需要依靠于堆的操作
堆是一颗二叉树,看似队列又非队列,其具有一定的排列性,我们将从STL库中的priority_queue来进行讲解
需要使用priority_queue时候需要#include <queue> using namespace std;
创建一个优先队列的操作是priority_queue <int> q,默认是优先级高的最先进行
随后其操作有以下几种:
push(x)//在优先队列中插入数字并对其进行初始化操作(局部排序)
pop()//弹出优先队列
size() //返回堆的长度
top() //弹出优先级较高的元素
STL库中还有一个定义方式
priority_queue <int,vector<int>,greater <int> > q;
其实是将数字较低的转置为优先级高的从而实现STL库的使用
其中如果int改为char,double,float等,那么相应地vector中的元素也需要进行相应的改变
我们都直到哈夫曼树是最优二叉树的一种通俗叫法,我们利用STL库的堆的操作来对其进行代码的撰写
常用的例子有搬东西的例子
也就是说有1,2,8,10斤大米,每斤大米对应的体力值是1,如何搬运消耗的体力值最少
我们首先选取1,2,可以得到树的权为3,随后在3,8,10中选择,其中3+8<3+10<8+10,故选择3和8,得到11,随后搬运11和10,得到权数是20,体力值是其之和,同时也是消耗体力最少的方法,如下我们将给出代码
#include <iostream>
#include <queue>
using namespace std;
priority_queue <int,vector<int>,greater <int> > q;
int main()
{
int n;
int ans=0,x,y,temp;//ans代表权值
cin>>n;//输入个数
for(int i=0;i<n;i++)
{
cin>>temp;//输入权数
q.push(temp);
}
while(q.size()>1)//必须有两个元素才可以对其进行操作
{
x=q.top();
q.pop();
y=q.top();
q.pop();
q.push(x+y);
ans=x+y;
}
cout<<x+y<<endl;
return 0;
}
- 优先队列的STL运用与哈夫曼树的实现
- 【C++】【STL】优先队列的实现
- STL 优先队列实现的DIJSKTRA算法
- 哈夫曼树 优先队列STL的应用
- 【算法设计-优先队列】优先队列的实现与操作
- STL之队列的运用
- STL之队列的运用
- STL 优先队列的 优先级
- STL 优先队列的优先级
- STL 优先队列的优先级
- STL优先队列的使用方法
- STL 的神器,优先队列
- STL的神器,优先队列
- STL 优先队列的 优先级
- STL优先队列的优先级
- STL 优先队列的优先级
- STL 优先队列、队列、栈的使用
- STL 优先队列、队列、栈的用法
- 3步基于docker搭建gitlab-ce
- C#中关于引用参数ref关键字的使用和本质论
- HC05蓝牙模块(主从一体)简单使用
- Ural 1018 Binary Apple Tree
- JavaScript-day14-个人学习笔记
- 优先队列的STL运用与哈夫曼树的实现
- HTML5地理定位
- jdbc工具类实例,案例,工具类抽取
- RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa
- 【bzoj3522】[Poi2014]Hotel
- 使用map巧妙去除集合中重复的对象
- 初学html5
- 竹迩带你玩懂设计模式(2)-设计模式一览
- WebService学习(四)——调用第三方提供的webService服务