我想通过定义自定义比较函数将一组对象存储在最小堆中。我看到有一个 heapq 模块作为 python 发行版的一部分可用。有没有办法在此模块中使用自定义比较器?如果没有,其他人是否构建了自定义最小堆?
两个选择(除了 Devin Jeanpierre 的建议):
-
在使用堆之前装饰您的数据。这相当于key=
排序选项。例如如果您(出于某种原因)想根据正弦值堆积数字列表:
data = [ # list of numbers ]
heap = [(math.sin(x), x) for x in data]
heapq.heapify(heap)
# get the min element
item = heappop(heap)[1]
The heapq
模块是用纯Python实现的。您只需将其复制到工作目录并更改相关位即可。快速浏览一下,您将必须修改 siftdown() 和 siftup(),如果需要的话还可能修改 nlargest 和 nsmallest。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)