浅析树状数组

本文内容遵从CC版权协议 转载请注明出自:   http://blog.csdn.net/masterluo

以前一直对树状数组这种结构并不感冒,因为觉得它能做到的事儿线段树也可以很好的完成。而且线段树应用更加灵活,可以说比树状数组的应用范围大很多。不过最近碰到两道题,都可以用树状数组这种结构很好的解决,代码非常精简单,特别是在二维应用的时候,用线段树非常麻烦,如果不是必要的话,不应当菜用线段树这种结构,而应用树状数组。稍微研究了下树状数组这种结构,写个总结吧。

树状数组它的每个元素并不像普通数组那样只保存自己的值,而是保存了从它开始前2^k个值的和(k为位置后面的二进制的0的个数)你可以看下图:

 

粉线色结点都只保持它自己的值,因为它们的二进制未尾0个数为0。绿色结点都保持了自己与它前一个值的和,蓝色结点保存了四个结点的值的和。棕色结点保存了8个结点的值的和。说了这么多,这种结构有什么用?它有什么优势呢?
它的主要优势就是可以快速求一段的和,即将求一段和的复杂度降到logN级别的,但是它增了修改一个元素的复杂度,使修改一个元素的复杂度也是logN级别的,不难知道,如果一个应用对于查询很多,每次查询都是一个区间的和,那么树状数组它的优势就很明显了。

问题一:怎么求一段元素的和?如果要求A[i –> j],显然如果能快速求A[1->i-1]和A[1->j]那么问题就解决了。怎么快速转化呢?
因为每个位置它都包含了一段的值,如果这一段值被加进来后,可以快速跳到下一个值,再求。如求A[1->6],那么知道6包括两个元素的和,下一次再求4,发现4包括四个元素的和,那么这两个和加进来就是结果。怎么快速求6的下一个元素呢?这就需要求出它二制后的0的个数的2的次幂,再与6作差即可。如6=(0000 0110)2,所以2^1=2 ,6-2=4,  4=(0000 0100), 所以2^2=4,4-4=0,结束。

问题二:怎么快速求一个数二进制后面0的个数的2次幂?位运算。两种方法:x&(-x)或x&(x^(x-1)),它们都利用了位运算的特点,因为我们要求的就是从低位到到高位把遇到的第一个1保持不变,其余各位清0的一个操作!

问题三:怎么快速修改一个元素的值?从上面的图可以看到,修改一个元素的值,所有包含它的值的元素都会被修改。同样,它的变化只与求和有一些不同,求和是往下走,而修改值是往上走!

变形应用:上面应用都是修改一个元素的值,求一段元素的和。那么它还可以进行什么样的操作呢?修改一段元素都增加或减少一个定值,查询一个元素的值!同样是logN级别的。问题是这样转化的:如果把a-b区间内的元素都要增加v,那么实际就可以把a元素增加v, b+1减少v,那么查询a元素的值呢?就是求sum(1->a)所有元素的和就行了!这样操作是否是正确的?正确性很容易证明,自己在纸上画画就会明白了。

二维树状数组与一维的情况类似。它也可以进行一段的操作,变形应用也可以。要注意的问题就是修改的值会变成四个角。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。
在Vue中,可以使用v-for指令来进行循环遍历数组。 以下是一个示例代码,展示了如何使用v-for遍历数组并输出每个数组元素: <ul> <li v-for="item in names">{{ item }}</li> </ul> 其中,names是一个数组,item是遍历过程中每个数组元素的值。在上述代码中,通过v-for指令将数组names中的每个元素渲染为一个li标签,并输出元素的值。 如果你还需要获取数组元素的下标,可以使用以下的语法: <ul> <li v-for="(item, index) in names">{{ index + 1 }}. {{ item }}</li> </ul> 其中,index表示当前元素的下标,item表示当前元素的值。在上述代码中,通过v-for指令将数组names中的每个元素渲染为一个li标签,并输出下标值和元素的值。 通过使用v-for指令,你可以方便地在Vue中对数组进行循环遍历,并灵活地输出数组元素的值或下标。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅析vue中常见循环遍历指令的使用 v-for](https://download.csdn.net/download/weixin_38500222/12957661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue:循环遍历(v-for)](https://blog.csdn.net/yufengguanyun/article/details/123297502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值