【面试复习】【数据结构】----优先队列

优先队列Priority queue

特点:正常进入,按照优先级出

实现机制:(了解背后实现机制,可以不用自己实现)

  1. 堆(heap):二叉堆、多项式堆、斐波那契堆【优先队列基本都用堆实现】
  2. 二叉搜索树

小顶堆

在这里插入图片描述
顶点永远小于左孩子和右孩子

大顶堆

顶点永远大于左孩子和右孩子

堆的复杂度

在这里插入图片描述
搜索最小值,基本都为O(1),所以二叉堆效率算是比较低的,因为删除插入的其他操作都为logn
斐波那契堆比较优秀,严格的斐波那契更加优秀!~

python中的堆和优先队列的使用方法:

堆:这里是二叉堆

这里暂时不做实现堆,而是调用heapq库。本身就是小顶堆

import heapq
a = []
heapq.heapify(a)   "初始化heapq(将数组self.pool定义为heapq类型)"
heapq.heappop(self.pool)   "从heapq中取出顶部min"
heapq.heappush(self.pool, val) "将val压入self.pool中"
heapq.heapreplace(self.pool, val) "将self.pool的顶部min替换为val"
item = heap[0]   "查看堆中最小值,不弹出"
heapq.nlargest(n,iterable,key=None) "从堆中找出最大的N个数,key的作用和sorted( )方法里面的key类似,用列表元素的某个属性和函数作为关键字"
优先队列

优先队列内部使用了heapq,不同的是PriorityQueue的操作是同步的,提供锁操作,支持并发的生产者和消费者,而且它的接口更加友好,它继承自Queue,所以好多Queue的方法可以直接使用

#优先队列
from queue import PriorityQueue as PQ
pq = PQ()
pq.put(1)  "向队列添加元素"
pq.put(2)	
print(pq.queue)  "获取队列所有元素"
print(pq.get())   "获取堆顶元素"
pq.empty()  "判空"
pd.qsize()  "队列大小,是真正大小减一"
发布了54 篇原创文章 · 获赞 13 · 访问量 3905
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览