算法设计与分析课件 04 priority- queue(优先队列)_第1页
算法设计与分析课件 04 priority- queue(优先队列)_第2页
算法设计与分析课件 04 priority- queue(优先队列)_第3页
算法设计与分析课件 04 priority- queue(优先队列)_第4页
算法设计与分析课件 04 priority- queue(优先队列)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算法设计与分析本节要点CONTENTSpriority_queue(优先队列)priority_queuepriority_queue是一个优先队列,按照优先级出队,默认最大值优先。不支持数组表示法和随机访问。成员函数:push(x):x入队;pop():出队;top():取队头;size():返回队中元素个数;empty():判队空,若为空返回true。priority_queue是一个优先队列,优先级高的最先出队,默认最大值优先。内部实现为堆,因此出队和入队的时间复杂度均为O(logn)。可以自定义优先级控制出队顺序,如果是数值,也可以加负号实现最小值优先,优先队列不支持删除堆中指定元素,只可以删除堆顶。

使用priority_queue需要引入头文件#include<queue>。priority_queue优先队列定义:priority_queue<int,vector<int>,cmp>que;其中,第一个参数为数据类型,第二个参数为容器类型,第三个参数为比较函数。后两个参数也可以省略。优先队列最常用的用法:priority_queue<int>que;//int类型,默认最大值优先priority_queue有4种方法可以实现优先级控制:使用C++自带的库函数<functional>自定义优先级①自定义优先级②自定义优先级③priority_queue方法1:使用C++自带的库函数,引入头文件#include<functional>equal_to<Type>//等于not_equal_to<Type>//不等于greater<Type>//大于greater_equal<Type>//大于等于less<Type>//小于less_equal<Type>//小于等于priority_queue<int,vector<int>,less<int>>que1;//最大值优先priority_queue<int,vector<int>,greater<int>>que2;//最小值优先priority_queue方法2:自定义优先级①,队列元素为数值型structcmp1{booloperator()(int&a,int&b){returna<b;//最大值优先,a>b表示最小值优先

}};创建优先队列:priority_queue<int,vector<int>,cmp1>que3;//最大值优先priority_queue方法3:自定义优先级②,队列元素为结构体型structnode1{intx,y;//结构体中的成员

booloperator<(constnode1&a)const{returnx<a.x;//最大值优先,x>a.x;表示最小值优先

}};创建优先队列:priority_queue<node1>que5;//使用时要把数据定义为node1类型priority_queue方法4:自定义优先级③,队列元素为结构体型structnode3{intx,y;//结构体中的成员};booloperator<(constnode3&a,constnode3&b){//在结构体外面定义

returna.x<b.x;//按成员x最大值优先}创建优先队列:priority_queue<node3>que7;//使用时要把数据定义为node3类型priority_queue第k大的数问题分析

本题数据量较大,1≤k≤n≤106,直接暴力肯定超时,因此可以借助优先队列实现。第k大的数算法设计(1)使用优先队列(最小值优先)存储最大的k个数。(2)插入。若队中元素个数小于k,则直接入队;否则若当前输入元素大于队头,则队头出队,当前元素入队。(3)查询。队头就是第k大的数,输出即可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论