用python内置的优先队列实现大顶堆,以及C++比较函数类似功能

前言

python默认的 pq 是小顶堆实现,非常不灵活,所以我就摸索出来了一种比较灵活的使用方法

用 PriorityQueue 实现大顶堆

from queue import PriorityQueue

pq = PriorityQueue()

pq.put((-1, 1) )
pq.put((-2, 2) )
pq.put((-3, 3) )

while not pq.empty():
	print(pq.get() )

以上代码把一个元组 (-x, x) put 进了堆,但是python只会比较元组的第一个元素,即 -x,所以元组的第二位可以用来保存自己的信息

以上代码输出:

-33)
(-22)
(-11

我们不需要关注返回来的元组的第一位是什么,因为它仅仅是用来比较的,我们需要关注的是元组的第二位,这才是我们需要的数据

用 pq 实现类似C++比较函数的功能

下面我们用这一特性实现比较复杂的类似比较函数的功能

from queue import PriorityQueue

pq = PriorityQueue()

s1, s2, s3, s4 = 'dfs', 'dijkstra', 'iddfs', 'spfa'

pq.put((len(s1), s1) )
pq.put((len(s2), s2) )
pq.put((len(s3), s3) )
pq.put((len(s4), s4) )

while not pq.empty():
	print(pq.get() )

该程序相当于把 len(s) 当作了比较函数参与比较,不做过多解释,运行结果如下

(3, 'dfs')
(4, 'spfa')
(5, 'iddfs')
(8, 'dijkstra')

容易看出,相当于按照 “字符串字节数小的优先级高” 这一规则进行的堆化

最后总结一下:
人生苦短,我用Python!!!
以后还会不定期分享一些小经验

就酱紫~

猜你喜欢

转载自blog.csdn.net/lwh1023443389/article/details/104024306