树状数组的时间复杂度证明

#build
根据建立的方法可以容易的写出递推式:
T ( n ) = T ( n − 1 ) + h e i g h t ( n ) T(n) = T(n-1) + height(n) T(n)=T(n1)+height(n)
height为该节点的高度,即 l o g 2 ( l o w b i t ( n ) ) log_2(lowbit(n)) log2(lowbit(n));
可以对每层分开记贡献即可以得到:
T ( n ) = ∑ i l o g 2 n n 2 i T(n) = \sum_i^{log_2n}\frac{n}{2^i} T(n)=ilog2n2in
所以:
1 &lt; = T ( n ) n &lt; = 2 1 &lt;= \frac{T(n)}{n} &lt;= 2 1<=nT(n)<=2
恒成立
所以树状数组建树时间复杂度为O(n)

#query/modify
不难想到对于任意数字,每一二进制位出现1的概率为 1 2 \frac{1}{2} 21,所以对于1-n的数字,期望出现 1 2 n ∗ l o g 2 n \frac{1}{2}n*log_2n 21nlog2n个1
所以树状数组的查询/修改时间复杂度为 O ( n ∗ l n n ) O(n*lnn) O(nlnn)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值