国内资料:http://baike.baidu.com/view/1420784.htm
国外资料:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binaryIndexedTrees
重点:
储存策略,更新策略,查找策略, x & (-x)的证明
数组从1开始
自己实现的代码如下:
#include <iostream>
int const N = 1000;
int tree[N];
void updateBIT(int* a, int idx, int len)
{
int val = a[idx];
while(idx <= len)
{
tree[idx] += val;
idx += (idx & (-idx));
}
};
void buildBIT(int* a, int len)
{
memset(tree, 0, len * sizeof(int));
for(int i = 1; i <= len; i++)
{
updateBIT(a, i, len);
}
};
int getSum(int idx)
{
int sum = 0;
while(idx > 0)
{
sum += tree[idx];
idx -= (idx & (-idx));
}
return sum;
};
int main()
{
int a[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
buildBIT(a, 20);
for(int i = 1; i <= 20; i++)
{
std::cout << "Sum[" << i << "] = " << getSum(i) << std::endl;
}
return 0;
}
本文详细介绍了二进制索引树(Binary Indexed Tree, BIT)的数据结构及其应用。主要内容包括二进制索引树的存储策略、更新策略、查找策略等关键概念,并提供了具体的代码实现示例。
1179

被折叠的 条评论
为什么被折叠?



