二叉索引树2024 年 8 月 28 日 | 阅读 6 分钟 二叉索引树 (BIT),也称为 Fenwick 树,是一种旨在有效执行数组元素累积频率操作的数据结构。由于它提供快速更新和前缀和查询,因此它在动态累积计算问题中特别有用。 BIT 的主要概念是利用数组索引的二进制表示来高效存储累积和。树的设计确保这些累积和可以以对数时间复杂度进行更新和检索。BIT 的每个成员表示原始数组中某个范围的和。 BIT 支持的两个主要操作是查询和更新。在 O(log n) 时间内,查询操作计算从数组开始到指定索引的累积和。以相同的 O(log n) 时间复杂度,更新操作修改数组中的元素并将更改传播到整个 BIT。 由于其内存占用小以及查询和更新的有效时间复杂度,BIT 可用于各种算法和编程任务,包括计算前缀和、解决动态范围和查询等。它是竞技编程和算法问题解决中的关键数据结构,是优化累积计算的强大工具。 二叉索引树的表示二叉索引树 (BIT),通常称为 Fenwick 树,通常用一个数字数组表示。该数组比我们想要执行累积操作的原始数组大一个大小。将此数组命名为 BIT。 对于长度为 n 的数组,BIT "BIT" 将包含 n+1 个条目。BIT 数组中每个元素的累积总和对应于初始数组 "arr" 中的某个范围。BIT 数组的索引映射到原始数组索引的各种二进制表示。 BIT 数组的创建和使用方式如下: 构建:BIT 的初始值为零。 更新元素:通过以下方式更新 BIT 数组中的相关元素来更新元素:
使用前缀和查询:以下过程用于确定原始数组中从索引 0 到 i(含)的累积总和:
示例:原始数组 (arr) [4, 2, 5, 8, 3, 1, 6] BIT 数组 (BIT) [ 0, 4, 6, 5, 19, 3, 4, 16] 二叉索引树代码 Python 输出 BIT array: [0, 4, 6, 5, 19, 3, 4, 16] Prefix Sum [0, 2]: 11 Prefix Sum [0, 5]: 23 Prefix Sum [2, 4]: 17 随附的 Python 代码演示了如何利用二叉索引树 (BIT) 来有效处理数组上的累积和操作。代码首先将 arr 数组填充为 [4, 2, 5, 8, 3, 1, 6],然后创建一个 BIT 数组并将其所有元素设置为零。 BIT 的核心操作由两个基本函数 update 和 query 完成。update 函数使用位操作高效遍历树,根据提供的索引和值推进 BIT 中的相关节点。query 函数使用位操作高效导航树,生成从索引 0 到 BIT 数组中特定索引的累积和。 construct_BIT 方法通过初始化 BIT 数组并使用 update 函数更新原始 arr 数组的每个元素来创建完全构建的 BIT。 构建 BIT 后,query 函数运行三个前缀和查询,生成原始数组中不同范围的累积和。结果显示了 BIT 计算前缀和的速度以及它处理这些查询的效率。 总而言之,代码说明了如何使用数组来表示 BIT,即使它不是标准树数据结构,也能有效执行累积和操作。由于其内存占用小以及优化的更新和查询操作,BIT 是需要对数组进行累积计算的各种算法任务和竞技编程挑战的有效工具。 在 Java 中输出 BIT array: 0 4 6 5 19 3 1 27 Prefix Sum [0, 2]: 11 Prefix Sum [0, 5]: 23 Prefix Sum [2, 4]: 17 二叉索引树 (BIT),也称为 Fenwick 树,在 Java 代码中实现。此数据结构旨在快速计算数组中的前缀和和范围和查询。代码首先指定 update、query 和 constructBIT 方法,然后演示如何在 main 方法中使用它们。 为了使用给定索引处的给定值更新 BIT 数组,update 函数需要 BIT 数组、一个索引和一个值。它使用位操作(索引 & -索引)遍历 BIT 数组,并修改值以保持累积和属性。query 函数迭代添加相关 BIT 值以确定到指定索引的前缀和。constructBIT 函数通过顺序更新每个输入数组元素来创建 BIT 数组。 main 方法中定义了一个名为 arr 的示例数组,其值为 [4, 2, 5, 8, 3, 1, 6]。BIT 数组使用 constructBIT 函数构建。运行以下三个前缀和查询: "query(BIT, 2)": 计算数组中从索引 0 到 2 的项的总和 (4 + 2 + 5),得出前缀和为 11。 "query(BIT, 5)": 此查询计算数组中直到索引 5 的所有成员的前缀和 (4 + 2 + 5 + 8 + 3 + 1),即 23。 "query(BIT, 4) - query(BIT, 1)": 计算索引 2 到 4 的元素的和 (5 + 8 + 3) 减去索引 0 到 1 的元素的总和,结果为范围和 17。 输出中首先显示生成的 BIT 数组(包含累积和),然后是三个前缀和查询的答案。该程序及其结果展示了二叉索引树如何有效地管理累积和并促进给定数组的范围和搜索。 |
我们请求您订阅我们的新闻通讯以获取最新更新。