博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.5.2 优先队列
阅读量:4580 次
发布时间:2019-06-09

本文共 811 字,大约阅读时间需要 2 分钟。

1.时间复杂度:最小堆

n个结点的完全二叉树(堆是完全二叉树)的深度为h(根的深度为1),则h和n之间满足 2^(h-2) <n <= 2^h,h近似等于log(n)+1。

从代码的直观来看,每次调整一个结点需要log(n),一共调整(n-1)/2个结点,故时间复杂度为O(nlogn),但要注意在中间过程中第s层的结点往下调整时实际只需最多调整(h-s)次,第s层一共调整2^(s-1)*(h-s),这样时间复杂度可写成:

 所以优先队列的构建时间为线性的。

2.功能:自动排序(默认从大到小)

3.头文件:

#include

4.声明:

priority_queue
<类型>
q;

5.操作:(注意和queue比   没有front和end操作)

q.size();//返回q里元素个数q.empty();//返回q是否为空,空则返回1,否则返回0q.push(k);//在q的末尾插入kq.pop();//删掉q的第一个元素q.top();//返回q的第一个元素

6.优先队列中使用结构体:(操作符重载)

struct Time{      int start;      bool operator < (const Time& t)const{          return start > t.start;      }  };

注意参数列表中的 const 不能少;

7.自定义排序:

从小到大:

priority_queue
,greater
>q1;//从大到小排序,最后两个> >中间必须要用空格

第二个参数为容器类型;

第三个参数为比较函数。

参考1:

参考2:

转载于:https://www.cnblogs.com/astonc/p/10055083.html

你可能感兴趣的文章
游戏开发——战斗系统设计技巧
查看>>
Android ROM 制作教程
查看>>
Android模拟器使用SD卡
查看>>
STL学习笔记(关联式容器)
查看>>
FMDataBase 打开sqlite的外键约束功能
查看>>
二分图
查看>>
UVA10559&POJ1390 Blocks 区间DP
查看>>
[bzoj 3289] Mato的文件管理
查看>>
Flutter学习笔记(五)
查看>>
vSphere的exsi root密码忘记了
查看>>
svn的安装过程
查看>>
NSCopying简析
查看>>
oracle 用户 角色 权限
查看>>
MySQL 分区知识点(三)
查看>>
使用pipreqs生成项目依赖
查看>>
android 二维码生成
查看>>
linux命令行快捷键
查看>>
hdu 1853 Cyclic Tour(费用流OR二分图最佳匹配,5级)
查看>>
js 对url进行某个参数的删除,并返回url
查看>>
Windows7装Linux虚拟机
查看>>