购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.1 优先队列的3种实现方式

考虑到我们希望有一个基于顾客忠诚度排序的优先顾客队列,忠诚度分数越高,优先级越高。在Python中实现优先队列,有多种方法,这里介绍其中常用的三种。

1.使用列表实现优先队列

一种非常简单明了的方法是使用普通列表,但每次添加元素时都需要对其进行排序。举例如下。

代码清单5-1 使用列表实现优先队列

运行结果:

将元素添加到列表时,时间复杂度为 O n log n )。因此,只有插入元素很少时才使用上述方法。

2.使用heapq实现优先队列

在Python中还可以使用heapq来实现优先队列,此方法的时间复杂度是 O (log n ),可用于最小元素的插入和提取。请注意,heapq仅具有最小堆实现。

代码清单5-2 使用heapq实现优先队列

运行结果:

3.使用queue.PriorityQueue实现优先队列

PriorityQueue在内部使用与5.1.2中相同的heapq实现,因此具有相同的时间复杂度。但是,它在两个关键方面有所不同。首先,它是同步的,因此它支持并发进程。其次,它是一个类接口,而不是heapq的基于函数的接口。因此,PriorityQueue在实现和使用Priority Queues时是经典OOP(面向对象)风格。

让我们为电影迷们建立一个优先队列。

代码清单5-3 使用queue.PriorityQueue建立优先队列

运行结果: KP20dcBWecKBTTEvSuuVIhlO2cg1Ldmswxf93QronJf/F8ZP3YmEXUYe9+CTwTAn

点击中间区域
呼出菜单
上一章
目录
下一章
×