关于 Python 标准库 heapq 的 大根堆/最大堆的 API~
3480
2022.09.13
2022.09.13
发布于 未知归属地

Python 的标准库 heapq 默认实现的是 小根堆/最小堆,官方文档(heapq)也是这么说的。但是 LeetCode 很多题用到 优先队列/大根堆/最大堆 的时候,Python 只能用 小根堆/最小堆 去实现,有点儿不方便。于是我们就很疑惑啦,为什么 heapq 没有实现 大根堆/最大堆 呢?或者你给个指定 大根堆/最大堆 或是 小根堆/最小堆 的参数也行啊。

嗯,其实 heapq 只是默认实现的是 小根堆/最小堆,不代表它没实现 大根堆/最大堆,如果你只看官方文档,你是看不出来 大根堆/最大堆API 的(因为官方文档只给了 小根堆/最小堆API),这个需要你去看源码 heapq.py ~

好了,以上都是废话,下面进入正题~

小根堆/最小堆大根堆/最大堆
heapq.heappush
heapq.heappopheapq._heappop_max
heapq.heapifyheapq._heapify_max
heapq.heapreplaceheapq._heapreplace_max

注:以上 大根堆/最大堆API,我也是今天才发现的,只在 LeetCode 上做了简单测试,而在实际提交中,还没来得及用 ~ 🤣

源码中没有 heappush 对应的 _heappush_max 方法,具体 大根堆/最大堆 怎么用,大家还是自己摸索吧~ 😂

上面 大根堆/最大堆API 是用 Python 实现的,也可以添加如下 import 语句,使用 C 实现的 API ~

from _heapq import _heapify_max as heapify
from _heapq import _heappop_max as heappop
from _heapq import _heapreplace_max as heapreplace
评论 (6)