当前位置: 首页 > news >正文

中国风网站模板下载余姚网站定制

中国风网站模板下载,余姚网站定制,网站开发步骤,精品网文文章目录 priority_queue的基本介绍堆(heap)堆的概念与结构 priority_queue 的介绍与使用 priority_queue的基本介绍 这个priority_queue翻译成中文就是优先级队列,但其实我们很难去一眼看出他的意思到底是什么,他的逻辑结构实际上类似于数据结构中的堆…

文章目录

  • priority_queue的基本介绍
  • 堆(heap)
    • 堆的概念与结构
  • priority_queue 的介绍与使用

priority_queue的基本介绍

这个priority_queue翻译成中文就是优先级队列,但其实我们很难去一眼看出他的意思到底是什么,他的逻辑结构实际上类似于数据结构中的堆(heap),而且是大根堆,即为堆顶为序列的最大值

堆(heap)

堆实际上是一种特殊的二叉树,他最最特殊的点在于可以用数组来存储数据

普通的二叉树是不适合用数组来存储的因为可能会存在大量的空间浪费,而对于完全二叉树更适合用顺序结构存储

堆的概念与结构

学术化的定义堆的概念过于难以理解,我们形象化的来理解他

一棵完全二叉树,他的任意一个节点值总是不大于或者不小于他的父节点的值

若堆顶为最大元素,则称为大根堆,若堆顶为最小元素,则称为小根堆

我们可以按照层次遍历的顺序对二叉树的所有节点进行标号,我们可以发现

$ parent = (child -1) / 2$

c h i l d = p a r e n t ∗ 2 + 1 child = parent*2+1 child=parent2+1

因此我们可以把它放入数组中,例如

这里我们演示了一个小根堆的逻辑结构和存储结构

对于堆的实现来说,他有两个主要的调整算法,向上调整和向下调整算法

当构建堆时,我们采用向上调整算法,例如我们想建立一个小根堆,依次插入数据,当子节点小于父节点时,交换位置即可,直到不小于或者到达堆顶

当取出堆顶元素时,我们采用向下调整算法,同样是小根堆,我们将堆顶元素和最后一个元素调换位置,将最后一个元素弹出,再将此时的堆顶元素向下调整,当子节点小于父节点时交换位置

对于调整和插入的算法复杂度,由于这是二叉树的性质,我们可以直到最坏的情况也只需要将层数遍历一遍,时间复杂度为O(log n)

priority_queue 的介绍与使用

我们了解了堆的基本内容之后再回到优先队列,我们已经知道了他的本质就是一个堆,再来理解就会相当简单

这里我们可以看到,优先队列和队列于栈同样使用了容器适配器,但是默认是一个顺序表,这里也好理解,因为deque的随机访问性能极差,并且这里还出现了一个新的Compare模板是less,这里实际上是一个用于确定大根堆还是小根堆的接口,less表示大根堆,greater表示小根堆

函数说明
priority_queue()/(first,last)空构造与区间构造
empty()判空
top()返回堆顶元素
push()插入
pop()弹出堆顶元素

注意:

  1. 默认优先队列是大堆

  2. 想要变成小堆需要用到greater,示例如下

    #include<vector>
    #include<queue>
    #include<functional>int main()
    {vector<int> v{6,3,1,5,4,2};priority_queue<int,vector<int>,greater<int>> q2(v.begin(),v.end());return 0;
    }
    
  3. 如果是自定义数据,就需要在自定义类型中提供比较运算符的重载才可以使用

要模拟实现优先级队列,我们需要介绍仿函数的内容,等到下一篇再介绍,感谢支持,如果你发现文章中有任何不严谨或者需要补充的部分,欢迎在评论区指出

http://www.15wanjia.com/news/160657.html

相关文章:

  • html5做的网站百度风云榜电视剧排行榜
  • 深圳建设企业网站公司网站建设预付款如何付
  • 网站表格边框怎么做wordpress虾米
  • 建设网站建设哪里好wordpress传到ftp
  • 哈尔滨网站建设哪个好网站免费域名申请
  • wordpress图片广告插件网站搜索引擎优化教程
  • 查询网站备案显示划横线途牛网站建设功能需求分析
  • 电影网站的代理怎么做网站开发 erp系统开发
  • 使用本地主机做网站潍坊网站优化培训
  • 重庆八大员证书查询网站wordpress 页面设置不了标签
  • 昆明百度智能建站做网站外包公司名称大全
  • 连山建设局网站网站备案后可以修改吗
  • 品牌网站开发公司新闻 今天
  • 网站的功能建设wordpress内外网
  • 建站软件安卓百度直播平台
  • 网站制作自己自己建网址
  • 建设网站的4个根目录被删温州网页设计制作
  • oss可以做网站根目录吗有了域名如何建立网站
  • 怎么做关于易烊千玺的网站网站的网站建设
  • 如何做好网站的建设与维护wordpress 阿里短信
  • 网站开发工具有互联免费主机
  • 佛山 做网站公司明天正式解封
  • 嘉兴网站推广优化永久免费不收费的软件app
  • dede怎么做双语网站一般通过中间人转账是否违法
  • 哪个网站可以做计算机二级的题最新资讯热点
  • 高端建站公司源码安徽省建设工程专业技术资格评审标准条件
  • 南京网站建设有限公司微信小程序怎么制作自己的程序
  • 公司网站属于信息化建设吗做网站需要雇什么人
  • 网站开发的硬件环境和软件怎么写网站开发需要用什么
  • 国外app界面设计网站手机网站的域名