当前位置:   article > 正文

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

构建树状数组的时间复杂度

#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)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/529137
推荐阅读
相关标签
  

闽ICP备14008679号