现在的位置: 首页 > 综合 > 正文

acm应用——Binary Indexed Tree

2019年11月06日 ⁄ 综合 ⁄ 共 486字 ⁄ 字号 评论关闭

Binary Indexed Tree,也就是二进制索引树,也就是树状数组。用来快速查找和修改一堆数的前缀和。传说中,时间复杂度是lg(n)。

好吧,它就是利用一个数组,每个元素分管一堆特定的连续元素,当然下标是不会超过它的,而且是以它为最终下标。

神奇之处就在于,它是利用二进制的特性进行区域的划分,即每个大于0的下标转成二进制,它的二进制数中的1的最低位就是它所管辖的数的数目。
比如说,4,二进制就是100,它还是管辖4个数。

利用二进制的方法划分区域,会得到几个有趣的性质。

这些性质如下:

比如说,数组中某个元素加a,那么更新管理前缀和数组的元素,就可以先把第一个对应的下标加上a,然后下标不断累加由当前下标转换成的管辖数目,每次得到一个新的下标,都加上一个a,直到遍历到最后的那个元素为止。这样,前缀和数组就可以更新完毕了。

再比如说,要输出某个下标的前缀和,那么就从这个下标开始,不断往前推当前下标所管的数目,并累加这些下标所管控的数字,直到遍历到最前面的那个元素为止。这样,结果就是某个下标的前缀和了。

最后,要得到某个下标管控的数目,用计算机的“与”运算就可以了。

废话完毕。

【上篇】
【下篇】

抱歉!评论已关闭.