acm应用——Binary Indexed Tree
2014-04-24 22:02
211 查看
Binary Indexed Tree,也就是二进制索引树,也就是树状数组。用来快速查找和修改一堆数的前缀和。传说中,时间复杂度是lg(n)。
好吧,它就是利用一个数组,每个元素分管一堆特定的连续元素,当然下标是不会超过它的,而且是以它为最终下标。
神奇之处就在于,它是利用二进制的特性进行区域的划分,即每个大于0的下标转成二进制,它的二进制数中的1的最低位就是它所管辖的数的数目。
比如说,4,二进制就是100,它还是管辖4个数。
利用二进制的方法划分区域,会得到几个有趣的性质。
这些性质如下:
比如说,数组中某个元素加a,那么更新管理前缀和数组的元素,就可以先把第一个对应的下标加上a,然后下标不断累加由当前下标转换成的管辖数目,每次得到一个新的下标,都加上一个a,直到遍历到最后的那个元素为止。这样,前缀和数组就可以更新完毕了。
再比如说,要输出某个下标的前缀和,那么就从这个下标开始,不断往前推当前下标所管的数目,并累加这些下标所管控的数字,直到遍历到最前面的那个元素为止。这样,结果就是某个下标的前缀和了。
最后,要得到某个下标管控的数目,用计算机的“与”运算就可以了。
废话完毕。
好吧,它就是利用一个数组,每个元素分管一堆特定的连续元素,当然下标是不会超过它的,而且是以它为最终下标。
神奇之处就在于,它是利用二进制的特性进行区域的划分,即每个大于0的下标转成二进制,它的二进制数中的1的最低位就是它所管辖的数的数目。
比如说,4,二进制就是100,它还是管辖4个数。
利用二进制的方法划分区域,会得到几个有趣的性质。
这些性质如下:
比如说,数组中某个元素加a,那么更新管理前缀和数组的元素,就可以先把第一个对应的下标加上a,然后下标不断累加由当前下标转换成的管辖数目,每次得到一个新的下标,都加上一个a,直到遍历到最后的那个元素为止。这样,前缀和数组就可以更新完毕了。
再比如说,要输出某个下标的前缀和,那么就从这个下标开始,不断往前推当前下标所管的数目,并累加这些下标所管控的数字,直到遍历到最前面的那个元素为止。这样,结果就是某个下标的前缀和了。
最后,要得到某个下标管控的数目,用计算机的“与”运算就可以了。
废话完毕。
相关文章推荐
- 山东省第五届ACM省赛题——Full Binary Tree(二叉树应用)
- Binary Indexed Tree
- 山东省第五届ACM大学生程序设计竞赛-Full Binary Tree(二叉树&&求任意两节点路径)
- Stack的应用——Binary Tree Preorder Traversal
- [LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析
- Binary Indexed Tree 2D 分类: ACM TYPE 2014-09-01 08:40 95人阅读 评论(0) 收藏
- 【面试常见算法整理】Binary Indexed Tree(Fenwick Tree,树状数组)详解
- 第五届山东省ACM Full Binary Tree
- Binary Indexed Tree 2D
- Full Binary Tree(山东省第五届ACM大学生程序设计竞赛 )
- Binary Indexed Tree Template
- 2014年山东省第五届ACM--Full Binary Tree (满二叉树)
- 树状数组(Binary Indexed Tree)
- Stack的应用——Verify Preorder Serialization of a Binary Tree
- [LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析
- 树状数组 Binary Indexed Tree
- POJ 2481 树状数组(Binary Indexed Tree)
- binary indexed tree 二分索引树 树状数组
- 树状数组(Fenwick tree,又名binary indexed tree
- Binary Indexed Tree