二维树状数组【信息技术】.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二维树状数组 胡伟栋 树状数组 问题: 有一个数列{an},给出一种操作序列,每次可以改变数列中的一个元素的值 要求动态维护,使得任何时刻都能用较快速度求出数列的部分和 树状数组 令t[i]=a[x-lowbit(i)..i]的和 则S[i]=t[i]+S[lowbit(i)] S[i]表示a[i]的部分和 S[i]=sigma{t[x(i)k]} x(i)0=i x(i)1=x(i)0-lowbit(x(i)0) x(i)2=x(i)1-lowbit(x(i)1) …… 树状数组 当更新a[i]时,需要更新 t[y(i)0] y(i)0=i t[y(i)1] y(i)1=y(i)0+lowbit(y(i)0) t[y(i)2] y(i)2=y(i)1+lowbit(y(i)1) …… 树状数组 二维树状数组 问题 给出矩阵{aij} 可以随时改变矩阵某一个位置的值 要求能随时求出矩阵中某一个连续子矩阵的和 二维树状数组 此问题和原来的问题很像,只是由一维变成了二维 需要对原来的数据结构进行改进,以适应新的要求 二维树状数组 改进 用t[i,j]表示a[i-lowbit(i)+1..i, j-lowbit(j)+1..j]的和 S[i,j]=? 二维树状数组 计算S[15,15] 二维树状数组 S[i,j]= sigma{t[x(i)k, x(j)l]} 二维树状数组 更新a[i, j] 需要更新t[y(i)k, y(j)l] 二维树状数组 二维树状数组 程序实现 update(i, j, v) add(i, j, v-old[i, j]); add(i, j, v) j0?j while (imaxi) j?j0 while (jmaxj) t[i,j]+=v j?(j|(j-1))+1 i?(i|(i-1))+1 程序实现 sum(i, j) sum?0 j0?j while (i0) j?j0 while (j0) sum+=t[i,j] j=j-1 i=i-1 二维树状数组 复杂度 单个操作 O(log2max) 例 有一个线段盒子 A x y 表示插入一条[x,y]线段 D x y 表示删除一条[x,y]线段,如果当前盒子里没有,就什么也不做 S x y 表示要求出完全在[x,y]区间的线段数 命令数105 1=x,y=1000 * * 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 14 14 1 2 3 4 5 6 7 8 9 10 11 12 13 15 13 12 11 10 9 8 7 6 5 4 3 2 1 14 14 1 2 3 4 5 6 7 8 9 10 11 12 13 15 13 12 11 10 9 8 7 6 5 4 3 2 1 更新a[1,1]

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档