微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中的堆数据结构

如何解决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 举报,一经查实,本站将立刻删除。