┌───────┴───────┐ │
┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ │
有了 lowbit,我们就能在完全二叉树里快速地定位:
我们知道,索引的本质就是预先存储一些信息,现在我们来看如何从原数组 A 来构建我们的二叉索引数 BIT 。我们定义:
看公式好像很复杂,我们拆解一下。看到下标 i - lowbit(i) + 1,我们知道代表了 i 所在节点左子树的底层节点。我们用图来说明如何计算 BIT[12] (图中标 x)
┌───────┴───────┐
┌───┴───┐ ┌───┴───┐
┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
所以说 sum(k) 操作就是求节点 k 及它的父节点的和。
可以有多种方式初始化,每种的复杂度不同。