使用python实现fenwick树

文章介绍了Fenwick树(也称二进制索引树)的数据结构,它用于高效地进行动态区间求和操作。通过`add`方法可以更新指定索引的值,`sum`方法可以计算给定区间内的元素总和。示例代码展示了如何创建一个Fenwick树并进行一系列操作,最后输出了区间求和的结果。
摘要由CSDN通过智能技术生成
class fenwicktree():
    def __init__(self, size):
        #size为所创建的树的大小
        self.size = size
        self.tree = [0] * (size + 1)

    def add(self, idx, delta):
        #将索引idx更新为delta,索引从0开始
        idx += 1
        while idx <= self.size:
            self.tree[idx] += delta
            idx += idx & -idx

    def sum(self, i, j):
        #返回索引i到索引j的和,包括i但是不包括j
        return self.prefix_sum(j) - self.prefix_sum(i)

    def prefix_sum(self, idx):
        #返回前idx个数的和
        res = 0
        while idx > 0:
            res += self.tree[idx]
            idx -= idx & -idx
        return res

#测试
tree = fenwicktree(5)
tree.add(0, 1)
tree.add(1, 2)
tree.add(2, 3)
tree.add(3, 4)
tree.add(4, 5)

print(tree.sum(1, 3))
#输出5
print(tree.prefix_sum(5)) 
#输出15

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值