二维前缀和和二维差分

前缀和的定义

前缀和(Prefix Sum)是一种数组预处理技术,用于高效地计算数组中某个范围内元素的和。前缀和数组是原始数组的元素依次累加的结果。

具体来说,计算前缀和的步骤包括:
初始化一个前缀和数组,长度为原始数组长度加一。
从数组的第一个元素开始,依次累加得到前缀和数组的每个元素。
最终得到前缀和数组,其中每个元素表示原数组中对应位置之前所有元素的和。
由于每个元素只被访问一次,所以总体的时间复杂度是 O(n)。
这使得前缀和成为一种高效的预处理技术,特别是在需要多次查询数组中某个范围的元素和时。

感觉前缀和有一点动态规划的思想在里面  通过前后的关系找到状态转移方程

一维前缀和: 

 一维前缀和公式

S[i]=S[i−1]+a[i] 

SUM =S[x2]-S[x1]

二维前缀和 

二维前缀和公式

S[i][j]=S[i][j−1]+S[i−1][j]−S[i−1][j−1]+a[i][j] 

SUM=s[x2][y2]−s[x1−1][y2]−s[x2][y1−1]+s[x1−1][y1−1]

一维差分

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

1.s[]数组是表示b[]数组前缀和的数组,此时b[]数组就是s[]数组的差分数组。
b[i]=s[i]-s[i-1]。a

2.a[]数组是表示原数组,b[]数组表示差分数组

   b[i]=a[i]-a[i-1]

   

二维差分

这里对比一维差分数组的求解,就是巧妙的将求二维前缀和的公式:

b[i] [j] = b[i-1][j] + b[i][j-1 ] - b[i-1][ j-1] + a[i] [j]

转换后求二维差分公式:a[i][j] = b[i][j] - b[i-1][j] - b[i][j-1] + b[i-1][j-1];

二维差分的使用
二维差分的主要用处:快速地将一个区块中的所有元素都加上一个值 v。使用差分可以将在数组 arr 上的区块操作转化为在差分数组 d 上的单点操作。

转换方式如下:假设区块左上角坐标为 (x1, y1),右下角坐标为 (x2, y2),对该区块中的每个元素都加上 v 等价于下面四个操作:

因为差分数组的前缀和相当于原数组,所以对差分数组进行以上四个单点操作后,就相当于给数组 arr 的区块加上一个值 v。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值