python - python中的最小堆

标签 python object heap min-heap

我想通过定义自定义比较函数将一组对象存储在最小堆中。我看到有一个 heapq 模块作为 python 发行版的一部分可用。有没有办法在这个模块中使用自定义比较器?如果没有,是否有人构建了自定义最小堆?

最佳答案

两个选项(除了 Devin Jeanpierre 的建议):

  1. 在使用堆之前修饰您的数据。这相当于排序的 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]
    
  2. heapq 模块是用纯 python 实现的。您可以将它复制到您的工作目录并更改相关位。快速浏览一下,您将不得不修改 siftdown() 和 siftup(),如果需要,可能还需要修改 nlargest 和 nsmallest。

关于python - python中的最小堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/679731/

相关文章:

javascript - 如何在reactjs中添加多个对象?

c++ - 如何复读这门课?

algorithm - 在 O(logk) 时间内删除 K 个排序双向链表的最小值

c++ - 堆排序 - 哪个堆(最小/最大)用于升序和降序排序?

python - 使用 NLTK 识别字符串中的日期

javascript - 为什么访问函数对象的属性会给出未定义的结果?

python - AWS Lambda S3 复制到 Postgres 成功但不复制数据

java - 插入二进制堆时出现 NullPointerException?

python - 更新矩形坐标未在 pygame 中注册?

python - 你如何让你的 Sprite 不在屏幕上复制自己?一旦文本出现,你如何让你的 Sprite 消失或重新开始?