前缀和与差分总结

本文介绍了前缀和和差分在IT中的概念,包括它们的定义、公式推导、经典题目示例以及在二维情况下的构造方法。重点讲解了一维和二维的预处理与求解技巧,强调了两者在处理数组区间和与操作中的作用,以及优化算法的应用,如蓝桥杯中的前缀和问题。
摘要由CSDN通过智能技术生成

前缀合和差分

前缀和和差分,只需要分别记住2个公式,一个是预处理的,一个是最后求解/操作的。

前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。




前缀和

前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。

image-20240408144826195



一维前缀和

下图两个重要公式

image-20240408145117345



公式推导 – 一维前缀和还是挺简单的,不需要画图啥的

image-20240408145212169



经典题目

image-20240408145338196



二维前缀和

预处理公式 – 不用死记,画图(i,j图)就能推出来,注意 = 号右侧有个a[] [] – 拼成一块大方形

image-20240408145508137



求解公式 – 也不用死记,画图(x1,y1 x2,y2图)就能推出来(注意画的图和上面那个是不一样的)-- 减成一块小的矩形

image-20240408145654081


经典例题

image-20240408145820782

上面例题共用原数组和前缀和数组了

image-20240408151106113



还要注意一点,x2,y2需要在x1,y1后面,比如遍历的时候

在这里插入图片描述





差分

image-20240408151229054



类似于数学中的求导和积分,差分可以看成前缀和的逆运算。



一维差分

如果a[] 的前缀和数组是 s[], 那么a[]就是s[]的差分数组 !!!

image-20240408151552622



差分数组的原理

image-20240408151650641




image-20240408151754697



差分数组初始化

​ b[i] = a[i] - a[i - 1]; //构建差分数组 ,a为前缀和数组



经典例题

image-20240408152216201

image-20240408152314216

最后构建前缀和那里,题解共用数组了 – 在b数组的基础上求前缀和数组 – 覆盖

上面例题的思路: 想对a进行操作(区间上都加上某个数),先求a对应的差分数组,然后处理差分数组,最后在构建一个新的前缀和数组(就是完成操作后的a!!!)





二维差分

image-20240408153123538



构造方法 – 画个(i,j图就能推出来) – 和 二维前缀和推导公式差不多

image-20240408161029520



操作公式 – 画图也容易理解 和 一位差分很类型–需要打补丁哈哈

image-20240408161220167

image-20240408161157556



经典例题

image-20240408161427444

上面例题的思路: 想对a进行操作(区间上都加上某个数),先求a对应的差分数组,然后处理差分数组,最后在构建一个新的前缀和数组(就是完成操作后的a!!!) – 和一维例题的思路完全一样!!!



总结

前缀和 和 差分 其本质都要预处理的,只不过一个是预处理求前缀合数组,一个是求差分数组

他们每一个维度都对应着有两个公式 。初始化,求解公式。一维的都比较简单,基本都可以直接写出来,二维的也不需要背,会画图就能推出来!

前缀和 的题就是求 某个区间里的和为多少/快速的求某区间的和,个数

差分 的题就是 想对某一个区间的值进行操作(±某值),然后 问/输出 操作后的数组, 差分通常需要配合前缀和一起使用 – 先差分 后 前缀和



蓝桥杯里的前缀和

image-20240409223139034

以前的写法,暴力dp

image-20240410094919958



优化后的

image-20240409223153214




此文章用于笔者记录学习,也希望对你有帮助

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值