python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python fenwick tree芬威克树算法

python实现fenwick tree芬威克树算法案例

作者:luthane

芬威克树,又称为二叉索引树或树状数组,是一种高效的数据结构,由Peter M. Fenwick于1994年提出,主要用于计算数组的前缀和以及支持对数时间复杂度的元素更新,通过维护一个特定的数组,利用整数的二进制特性进行区间和存储

fenwick tree芬威克树算法介绍

Fenwick Tree,也被称为Binary Indexed Tree(二叉索引树)或树状数组,是由Peter M. Fenwick在1994年以“A New Data Structure for Cumulative Frequency Tables”为题首次介绍的一种数据结构。

Fenwick Tree主要用于高效地计算数字序列(数组)的前缀和,同时支持对数时间复杂度的元素更新操作。

基本概念

原理

主要操作

实现

Fenwick Tree的实现通常包括以下几个部分:

示例

注意事项

fenwick tree芬威克树算法python实现样例

Fenwick Tree(也称为Binary Indexed Tree)是一种用于高效计算前缀和(Prefix Sum)的数据结构,可以在O(log n)时间内进行插入、查询和更新操作。

下面是一个实现Fenwick Tree算法的Python代码示例:

class FenwickTree:
    def __init__(self, n):
        self.size = n
        self.tree = [0] * (n + 1)

    # 更新操作:将索引i位置的元素增加delta
    def update(self, i, delta):
        while i <= self.size:
            self.tree[i] += delta
            i += i & -i

    # 查询操作:计算前i个元素的和
    def query(self, i):
        res = 0
        while i > 0:
            res += self.tree[i]
            i -= i & -i
        return res

    # 计算区间[i, j]的和
    def range_query(self, i, j):
        return self.query(j) - self.query(i-1)

使用示例:

fenwick_tree = FenwickTree(10)
fenwick_tree.update(1, 2)
fenwick_tree.update(3, -1)
fenwick_tree.update(5, 5)

print(fenwick_tree.range_query(1, 5))  # 输出:6
print(fenwick_tree.range_query(3, 7))  # 输出:4

在上面的代码中,FenwickTree类的构造函数接受一个整数参数n,表示Fenwick Tree的大小。

在使用Fenwick Tree的时候,可以根据实际需求进行适当的修改。

例如:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文