heapq python内置的堆结构,小点堆(优先队列)
完全二叉树: 必须现有子节点
最小堆:默认每个节点都小于其子节点
适用于动态添加元素和获取最小值
基本语法:
1.创建,将一个list转换成最小堆 :heqpq.heapify(list)

2.向最小堆中添加元素 :heapq.heappust(list, a)

3.弹出最小元素 : heapq.heappop(list)

4.弹出最小值的同时,补充一个值进堆 :heapq.heapreplace(list, b)

5.从可迭代对象中快速获取最大(小)的 N 个元素,效率高于先排序再切片的方式:heapq.nlargest() heapq.nsmallest()

6.只访问最小值,不改变堆内容: 访问下标[0]

heapq 按最大堆使用, 对每个权重取负值即可

heap: 插值和弹出的规则
插值: 将插入的值放在最末尾, 然后依次与其父节点比较,如果小于,则交换位置


弹出: 弹出最小节点,并将最后一个节点放入最小节点的位置,然后依次与其子节点比较,与较小的那个交换位置,直到所有节点满足笑点堆完全二叉树的规则



继续弹出,则按如上步骤:

示例:
对事物按优先级排序

其它: 队列中的优先队列

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。