1. 程式人生 > >樹狀陣列的時間複雜度證明

樹狀陣列的時間複雜度證明

build

根據建立的方法可以容易的寫出遞推式:

T ( n ) = T ( n
1 ) + h e i g h t ( n )

height為該節點的高度,即
2(lowbit(n))" role="presentation"> l o g 2 ( l o w b i t ( n )
)
;
可以對每層分開記貢獻即可以得到:
T ( n ) = i l o g 2 n n 2 i
所以:
1 <= T ( n ) n <= 2
恆成立
所以樹狀陣列建樹時間複雜度為O(n)

query/modify

不難想到對於任意數字,每一二進位制位出現1的概率為 1 2 ,所以對於1-n的數字,期望出現 1 2 n l o g 2 n 個1
所以樹狀陣列的查詢/修改時間複雜度為 O ( n l n n )