问题描述
当创建一个堆来动态跟踪最小值时,在初始化一个空堆之后,我真的需要调用 heapq.heapify(heap)
吗?或者更确切地说,hq.heappop()
和 hp.heappush()
会自动完成这项工作..感谢您的帮助!
import heapq as hp
heap = []
hp.heapify(heap) # is this line redundant?
for val in range(1,100):
hp.heappush(heap,val)
print(heap[0])
解决方法
是的,在你的情况下它是多余的。来自官方文档 here:
heapq.heappush(heap,item)
将值项推送到堆上,保持堆不变。
heapq.heapify(x)
在线性时间内将列表 x 就地转换为堆。
从 heapify
方法的描述中可以看出,它用于将现有列表转换为堆结构。
但是,如果您想在添加新元素时保留数据结构的堆属性,那么 heappush
是一种可行的方法。
import heapq as hp
heap = []
for val in range(1,100):
hp.heappush(heap,val)
print(heap[0])
但是,如果您想将现有数组/列表转换为堆,请使用 heapify
方法:
import heapq as hp
heap = []
for val in range(1,100):
heap.append(val)
hp.heapify(heap)
print(heap[0])