如何解决在 Python3 中初始化堆后是否需要堆化
当创建一个堆来动态跟踪最小值时,在初始化一个空堆之后,我真的需要调用 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])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。