当前位置: 首页 > news >正文

web3d游戏网站开发/湖州网站建设制作

web3d游戏网站开发,湖州网站建设制作,中国贸易网是什么网站,网页制作 基础教程原文链接:数据结构之树状数组。 1、概述 树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括地说,树状数组通常用于解决以下问题:数组{a}中的元素可能不断地被修改&a…

原文链接:数据结构之树状数组。

1、概述

树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括地说,树状数组通常用于解决以下问题:数组{a}中的元素可能不断地被修改,怎样才能快速地获取连续几个数的和?

2、树状数组基本操作

传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(n)。树状数组通过将线性结构转换成伪树状结构(线性结构只能逐个扫描元素,而树状结构可以实现跳跃式扫描),使得修改和求和复杂度均为O(lgn),大大提高了整体效率。

给定序列(数列)A,我们设一个数组C满足

C[i] = A[i–2^k+ 1] + … + A[i]

其中,k为i在二进制下末尾0的个数,i从1开始算!

则我们称C为树状数组。

下面的问题是,给定i,如何求2^k?

答案很简单:2^k=i&(i^(i-1)) ,也就是i&(-i)

下面进行解释:

以i=6为例(注意:a_x表示数字a是x进制表示形式):

(i)_10 = (0110)_2

(i-1)_10=(0101)_2

i xor (i-1) =(0011)_2

i and (i xor (i-1))  =(0010)_2

2^k = 2

C[6] = C[6-2+1]+…+A[6]=A[5]+A[6]

数组C的具体含义如下图所示:


当我们修改A[i]的值时,可以从C[i]往根节点一路上溯,调整这条路上的所有C[]即可,这个操作的复杂度在最坏情况下就是树的高度即O(logn)。另外,对于求数列的前n项和,只需找到n以前的所有最大子树,把其根节点的C加起来即可。不难发现,这些子树的数目是n在二进制时1的个数,或者说是把n展开成2的幂方和时的项数,因此,求和操作的复杂度也是O(logn)。

树状数组能快速求任意区间的和:A[i] + A[i+1] + … + A[j],设sum(k) = A[1]+A[2]+…+A[k],则A[i] + A[i+1] + … + A[j] = sum(j)-sum(i-1)。

下面给出树状数组的C语言实现:

//求2^kint lowbit(int t){return t & ( t ^ ( t - 1 ) );}//求前n项和int sum(int end){int sum = 0;while(end > 0){sum += in[end];end -= lowbit(end);}return sum;}//增加某个元素的大小void plus(int pos, int num){while(pos <= n){in[pos] += num;pos += lowbit(pos);}}

3、扩展——二维树状数组

一维树状数组很容易扩展到二维,二维树状数组如下所示:

C[x][y] = sum(A[i][j])

其中,x-lowbit[x]+1 <= i<=x且y-lowbit[y]+1 <= j <=y

4、应用

(1)    一维树状数组:

参见:http://hi.baidu.com/lilu03555/blog/item/4118f04429739580b3b7dc74.html

(2)    二维树状数组:

一个由数字构成的大矩阵,能进行两种操作

1) 对矩阵里的某个数加上一个整数(可正可负)

2) 查询某个子矩阵里所有数字的和

要求对每次查询,输出结果

5、总结

树状数组最初是在设计压缩算法时发现的(见参考资料1),现在也会经常用语维护子序列和。它与线段树(具体见:数据结构之线段树)比较在思想上类似,比线段树节省空间且编程复杂度低,但使用范围比线段树小(如查询每个区间最小值问题)。

6、参考资料

(1)    Binary Indexed Trees:

http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=binaryIndexedTrees

(2)    吴豪文章《树状数组》:

http://www.java3z.com/cwbwebhome/article/article19/zip/treearray.zip

(3)    郭炜文章《线段树和树状数组》:

http://poj.org/summerschool/1_interval_tree.pdf








转载于:https://www.cnblogs.com/tigerisland/p/7564557.html

http://www.lbrq.cn/news/814411.html

相关文章:

  • 无锡做公司网站/网页推广链接怎么做
  • 小程序开发制作公司哪家好/东营网站seo
  • 报名网站怎么做/计算机培训机构哪个最好
  • 网站欣赏/成功的品牌推广案例分析
  • 小程序怎么做微网站链接/今天的新闻最新消息
  • php网站开发图文教程/网站视频播放代码
  • 做网站 乐清/百度公司电话是多少
  • 工作室怎么网站备案/西安seo网站关键词
  • wordpress二次开发手册chm/搜索引擎关键词优化技巧
  • 网站tag 怎么实现/aso优化渠道
  • 网站有二级域名做竞价/成都网站建设技术支持
  • 自己怎么做视频收费网站/手机网站制作软件
  • 徐州小程序开发/如何软件网站优化公司
  • 娄底高端网站建设/最佳磁力引擎吧
  • 人工智能设计系统公司/抖音seo运营模式
  • wordpress 微信导航站/站长工具同大全站
  • 做网站带来的好处/广告联盟app下载官网
  • 公众号小程序商店/app搜索优化
  • b站直接进入/企业建站用什么好
  • 开源网站建设/外贸谷歌推广
  • 抚州南城网站建设/色盲怎么治疗
  • 部门网站建设管理典型经验材料/什么是搜索引擎竞价推广
  • 网站建设分为什么/百度极速版下载
  • wordpress代码中文注释/seo服务建议
  • 2008 iis asp配置网站/合肥seo搜索优化
  • 网站推广大概需要多少钱/人民日报今天新闻
  • 福建设计院网站/地推放单平台
  • 北京网站开发多少钱/服务器
  • 店面设计费入什么科目/网络推广优化网站
  • 合肥网站制作需/杭州小程序建设公司
  • 最优估计准则与方法(4)最小二乘估计(LS)_学习笔记
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频语义理解与智能检索进阶(365)
  • linux内核电源管理
  • Android 蓝牙学习
  • SpringBoot整合Liquibase提升数据库变更的可控性、安全性、自动化程度(最详细)
  • 【vue vapor jsx 未雨绸缪】