赞
踩
#build
根据建立的方法可以容易的写出递推式:
T
(
n
)
=
T
(
n
−
1
)
+
h
e
i
g
h
t
(
n
)
T(n) = T(n-1) + height(n)
T(n)=T(n−1)+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)=i∑log2n2in
所以:
1
<
=
T
(
n
)
n
<
=
2
1 <= \frac{T(n)}{n} <= 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
21n∗log2n个1
所以树状数组的查询/修改时间复杂度为
O
(
n
∗
l
n
n
)
O(n*lnn)
O(n∗lnn)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。