py中的heapq操作

https://blog.csdn.net/chandelierds/article/details/91357784,这个讲的很不错

1.往堆中添加元素

import heapq
a = []   #创建一个空堆
heapq.heappush(a,18)
heapq.heappush(a,1)
heapq.heappush(a,20)
heapq.heappush(a,10)
heapq.heappush(a,5)
heapq.heappush(a,200)
print(a)

[1, 5, 20, 18, 10, 200]

 就是对list进行操作,py中没有堆的类。

 py中的这个是小根堆,若要建大根堆,可以加负号。

2.建堆

一个list经过heapfy之后,就可以变成小根堆,否则也只是根据原来的顺序遍历。

import heapq
a = [1, 5, 20, 18, 10, 200]
heapq.heapify(a)#这里直接对a进行修改,不返回任何东西
print(a)

[1, 5, 20, 18, 10, 200]

3.弹出

import heapq
a = [1, 5, 20, 18, 10, 200]
heapq.heapify(a)
print(heapq.heappop(a))#当然此时的a是经过heapfy的,否则如果只是针对普通list的话,是不会弹出最小值的。

1

4.

另外还有其他函数,这里就不写了,包括heappushpop、heapreplace(heap.item)、merge、nlargest、nsmallest。

原博客中还有对topN的算法的比较。还有对heapq各种操作的时间复杂度介绍。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/13719045.html