我正在尝试使用 heapq 模块( https://docs.python.org/3/library/heapq.html )中的 Python(2.0)内置最小堆数据结构来构建最大堆。为此,我只需使用需要推入堆中的数字的负数。
使用这个(最大堆版本):
import heapq
h=[]
for i in xrange(10):
heapq.heappush(h,-i)
print h
我得到一些看起来不正确的东西:
[0]
[-1, 0]
[-2, 0, -1]
[-3, -2, -1, 0]
[-4, -3, -1, 0, -2]
[-5, -3, -4, 0, -2, -1]
[-6, -3, -5, 0, -2, -1, -4]
[-7, -6, -5, -3, -2, -1, -4, 0]
[-8, -7, -5, -6, -2, -1, -4, 0, -3]
[-9, -8, -5, -6, -7, -1, -4, 0, -3, -2]
最小堆版本看起来不错:
import heapq
h=[]
for i in xrange(10):
heapq.heappush(h,i)
print h
如你看到的:
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
我错过了什么?
我检查了其他 SE 问题/答案(例如,python topN 最大堆、使用 heapq 还是自我实现?、我在 Python 中使用什么来实现最大堆?等)但他们没有提到这个问题。