树状数组(二进制索引树)

引用byvoid大神的解释:

树状数组是一个优美小巧的数据结构,在很多时候可以代替线段树。一句话概括就是,凡是树状数组可以解决的问题,线段树都可以解决,反过来线段树可以解决的问题,树状数组不一定能解决。

树状数组英文名称为Binary Index Tree,直译过来就是二进制索引树,我觉得二进制索引树更能说明其本质。树状数组的本质就是一种通过二进制位来维护一个序列前i和的数据结构。

对于维护的序列A,定义C[i]=A[j+1]+...+A[i],其中ji的二进制表示中把最右边的1换成0的值。j的值可以通过lowbit求出,即i-lowbit(i)

lowbit(a)2^(a的二进制表示末尾0的个数)

 我的理解:

二进制索引树是将一维数组分成k+1层,第0层元素的索引值末尾有0个0,第1层元素的索引值末尾有1个0,第k层元素的索引值末尾有k个0,第k层元素直接或间接地掌管该元素前2^k个元素(包括自身)。

另:某个元素被它以上第一个索引值末尾多一个0的元素直接掌管。 

如图: 

 

转载于:https://www.cnblogs.com/byluoluo/p/3440112.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值