gpt4 book ai didi

python - Python 中内置的最大堆 API

转载 作者:IT老高 更新时间:2023-10-28 20:33:53 26 4
gpt4 key购买 nike

默认 heapq 是最小队列实现,想知道是否有最大队列选项?谢谢。

我尝试了使用 _heapify_max 作为最大堆的解决方案,但是如何动态处理 push/pop 元素?看来 _heapify_max 只能在初始化期间使用。

import heapq

def heapsort(iterable):
h = []
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]

if __name__ == "__main__":

print heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])

编辑,尝试 _heapify_max 似乎不适用于动态推送/弹出元素。我试过两种方法输出一样,输出都是,[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。

def heapsort(iterable):
h = []
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]

def heapsort2(iterable):
h = []
heapq._heapify_max(h)
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]

if __name__ == "__main__":

print heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print heapsort2([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])

提前致谢,林

最佳答案

过去我只是简单地使用 sortedcontainersSortedList 为此,如:

> a = SortedList()
> a.add(3)
> a.add(2)
> a.add(1)
> a.pop()
3

它不是堆,但速度很快,可以根据需要直接工作。

如果你绝对需要它成为一个堆,你可以创建一个通用的否定类来保存你的项目。

class Neg():
def __init__(self, x):
self.x = x

def __cmp__(self, other):
return -cmp(self.x, other.x)

def maxheappush(heap, item):
heapq.heappush(heap, Neg(item))

def maxheappop(heap):
return heapq.heappop(heap).x

但这会占用更多内存。

关于python - Python 中内置的最大堆 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com