如何解决python中的堆数据结构
我已经在 python 中实现了最小堆,但经过一些测试后我意识到有时大约在每 10 次插入后它会将它放在错误的位置(父级大于子级)。 代码:
class minHeap():
def __init__(self):
self.heap = [] # main array
def get_parent(self,i):
return i//2
def bubble_up(self):
i = len(self.heap)-1
p = self.get_parent(i)
while self.heap[p] > self.heap[i]:
self.heap[i],self.heap[p] = self.heap[p],self.heap[i] # swapping parent and child
i = p
p = self.get_parent(i)
def insert(self,k):
self.heap.append(k)
self.bubble_up()
我过去 2 小时一直在寻找错误,所以如果有人能帮助我,我将不胜感激。
解决方法
解决方案
你应该改变这个功能
def get_parent(self,i):
return i//2
致:
def get_parent(self,i):
return (i-1)//2
说明
您正在使用 python 中的列表来初始化 0-indexed
。
self.heap = [] # main array
现在,假设您添加了 2 个元素 1 和 5。
self.heap = [1,5]
现在。如果再添加一个元素,即 3。
self.heap = [1,5,3]
现在,3 的索引是 2。它的 parent 应该是 1(index = 0)。但是 i//2 会给你 5(index = 1) as 2//2 = 1
。
因此,您应该使用 (i-1)//2
,它会给您 0。
(2-1)//2 = 0
希望你已经理解了我的解决方案?。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。