首页 > 代码库 > 二叉索引树 BIT
二叉索引树 BIT
BIT
说白了 是根据 数的二进制所显示的特征 建成的一棵树
首先明白 lowbit(x) 表示的意思
他表示一个数 最右边的 1 所对应的值
lowbit(x)= x&-x ;
下面根据lowbit 来建树
***********建在脑子里*********
BIT特点:
首先将每一个节点 进行 编号
1.每一层 节点 的 lowbit 相等
2.一个节点 i 若是左子节点 则 它所对应的父节点的序号为 i - lowbit(i)
右 i + lowbit(i)
3.从 完全二叉树的角度 来看 若以一个节点 i 为根节点 则它的 左子树 的序号依次为 i-lowbit(i)+1 i-lowbit(i)+2 …… i
c[i]表示空白区域的数的和
c[i] = A( i - lowbit(i) + 1 ) + A( i - lowbit(i) + 2 ) + …… + A( i )
下面来求 前缀和 && 当其中一个数的值改变 怎样来修改之前计算好的C[],修改哪些。从而才能再求改变后的前缀和
s[i] 表示前缀和
s[i] 向左往上爬 s[i] = sum ( c[x] ) ; x= i - lowbit(i) ;
若某一点改变 需要更改 C[]
从该点 向右往上爬 所经过的节点的c[i]都要改变
c[x]=c[x]+changenum ; x=i + lowbit(i) ;
二叉索引树 BIT