数据结构与算法——优先队列
了解优先队列前,先了解堆的数据结构
堆:必须是一个完全二叉树
完全二叉树有以下性质:
(1)完全二叉树只允许最后一行不为满
(2)且最后一行必须从左往右排序
(3)最后一行元素之间不可以有间隔
堆的第二性质:堆序性
大根堆:根节点大于子节点
小根堆:根节点小于子节点
以大根堆来说明上滤和下滤操作:
下滤:树的根节点破坏了堆序性,根节点向下调整的操作称为下滤(复杂度是O(logN))
上滤:树的最后一个元素破坏了堆序性,那和父节点进行比较,若大于父节点,则交换,直到无法上移为止。这个操作主要用在新元素插入到堆中。(复杂度是O(logN))
建堆的方法:
自顶而下:插入堆,上滤(复杂度是O(NlogN))
自下而上:对每个父节点进行下滤(复杂度是O(logN))
优先队列:队尾插入,队头弹出最小元素。(小根堆)
priority_queue
等价于priority_queue<int,vector
小顶堆的构造
priority_queue<int,vector
priority_queue<pair<int,int>> q3
排序规则默认先比较第一个值,后比较第二个值
作者:水水滴答
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。