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各种操作的时间复杂度介绍。