python 树状数组_(原)数据结构之树状数组详解

树状数组

树状数组是一个查询和修改复杂度都为log(n)的数据结构。

主要用于数组的单点修改&&区间求和.

另外一个拥有类似功能的是线段树

🔺树状数组(Binary Indexed Tree) ------解决动态前缀和问题的数据结构

1、对于询问操作(复杂度为logN)

查询前缀和

(1)首先了解管辖区域:设节点编号为x,那么这个节点管辖的区间为2^k,(其中k为二进制末尾0的个数)个元素;

什么意思呢;

例:1)设我们一共有n个元素:a1,a2,a3,.........an,设管辖数组为d[ ] ;

则    d[6] = a5 + a6;    这是为什么呢;

看6的二进制形式为110   末尾有一个零 ,则管辖的区间为2^1 = 2个元素

2)再看d[8] = a1+a2+....+a8;  共8个元素

因为8的二进制为1000  ,末尾有三个零,则管辖的区间为2^3 = 8 个元素;

以下面这幅图为例

c375d158d248a9d5158e050a959c5775.png

(2)了解如何查询前缀和:

例:假设我们要查13这个位置的前缀和:

那么怎么知道为多少呢。</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值