首页

文章

Bit的树状数组

发布网友 发布时间:2022-04-19 12:30

我来回答

1个回答

热心网友 时间:2023-10-24 23:01

BIT (Binary Indexed Tree)树状数组。
其基本思想是:将原数据划分为多个区间,当要查询或更新某个数或某段数据时,只需更新到各个区间不必细化到具体的各个元素。
例有k个元素的集合,划分区间时利用函数
int lowbit(int x){
return x&(x^(x–1));(或return x&(-x);)
}
求得各个区间的范围
树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构,支持随时修改某个元素的值,复杂度也为log级别。
观察这个图:
令这棵树的结点编号为C1,C2...Cn。令每个结点的值为这棵树的值的总和,那么容易发现:
C1 = A1
C2 = A1 + A2
C3 = A3
C4 = A1 + A2 + A3 + A4
C5 = A5
C6 = A5 + A6
C7 = A7
C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8
...
C16 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + A12 + A13 + A14 + A15 + A16
这里有一个有趣的性质:
设节点编号为x,那么这个节点管辖的区间为2^k(其中k为x二进制末尾0的个数)个元素。因为这个区间最后一个元素必然为Ax,
所以很明显:Cn = A(n – 2^k + 1) + ... + An
算这个2^k有一个快捷的办法,定义一个函数如下即可:
int lowbit(int x){
return x&(x^(x–1));(或return x&(-x);)}
当想要查询一个SUM(n)时,可以依据如下算法即可:
step1: 令sum = 0,转第二步;
step2: 假如n <= 0,算法结束,返回sum值,否则sum = sum + Cn,转第三步;
step3: 令n = n – lowbit(n),转第二步。
可以看出,这个算法就是将这一个个区间的和全部加起来,为什么是效率是log(n)的呢?以下给出证明:
n = n – lowbit(n)这一步实际上等价于将n的二进制的最后一个1减去。而n的二进制里最多有log(n)个1,所以查询效率是log(n)的。
修改的时候,修改一个节点,必须修改其所有祖先,最坏情况下为修改第一个元素,最多有log(n)的祖先。
所以修改算法如下(给某个结点i加上x):
step1: 当i > n时,算法结束,否则转第二步;
step2: Ci = Ci + x, i = i + lowbit(i)转第一步。
i = i +lowbit(i)这个过程实际上也只是一个把末尾1补为0的过程。
对于数组求和来说树状数组十分地迅速。
算法分析:
如果直接做的话,修改的复杂度是O(1),询问的复杂度是O(N),M次询问的复杂度是M*N.M,N的范围可以有100000以上,所以这样做会超时,但是如果用bit树状数组的话,还是很不错的!

土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 树形结构的线路复杂网络管理也比较困难是否正确这句话 excel2016有什么新功能 初三数学树状分类法的定义? 树状数组的树状数组的经典操作 在word里如何建立树状图? 什么软件可以做多级树形排版? 概率的题必须用树状图吗?感觉好复杂,有没有简便的方法啊 wps的word怎么制作树状图 根据递归式如何画出树状图分析时间复杂度 树状图怎么画 如何做树状图 如何画较复杂的树状算图? wps2019怎么做树状图-wps+office怎么做树状图? 华为glk一al00是什么型号,账号锁能解开吗? 女朋友说受不了我那地方,说大她受不了,每次都疼,要和我分手 女孩觉得我年龄太大了? 女朋友说我年龄大怎么回复 女朋友嫌弃我的太大怎么办,,, 女朋友嫌弃我的大怎么办,她说受不了 我的太大,女朋友不让做了,要分手,咋办啊? 浠的意思 简述线性结构,树形结构和图形结构的不同点 wbs的树状结构和列表式结构各有什么优缺点 在树状结构csp问题的最坏情况下运行ac-3算法的复杂度是多少 树状结构怎么统一建表? GMDR软件怎么画交互作用树状图 关于香肠的句子 如何形容香肠好吃 请大家帮我收集一下<终极一家>所有的经典语录 贝爷经典语录有哪些? 蜡笔小心经典语录 求蜡笔小新的经典语录 最经典的流氓语录!!! 赞美胖子的幽默的句子 有哪些经典语录让人落泪? 求终极系列几句经典语录 蜡笔小新经典搞笑语录 求精选笑话,最新最潮的,幽默语录 收集笑话 冷笑话 经典语录 一个盘里有三枝花一个是空盘数学什么意思
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com