首页 > 代码库 > 二叉索引树 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