二维前缀和和差分算法讲解

1. 二维前缀和

一维前缀和的回顾

在一维前缀和中,我们用一个数组pre来存储数组arr的前缀和,pre[i]表示从arr[0]arr[i]的累加和。通过前缀和,我们可以在常数时间内求出任意区间[l, r]的和,计算公式为: 区间和=pre[r]−pre[l−1]

二维前缀和的类比

在二维前缀和中,我们处理的是一个矩阵(二维数组)。假设有一个矩阵mat,我们用一个二维数组pre来存储二维前缀和。pre[i][j]表示从矩阵的左上角(0,0)(i,j)这个矩形区域内的所有元素的累加和。

二维前缀和的计算公式

假设矩阵mat的大小为m×n,二维前缀和pre的计算公式如下: pre[i][j]=mat[i][j]+pre[i−1][j]+pre[i][j−1]−pre[i−1][j−1]

解释:

  • mat[i][j]是当前元素。

  • pre[i - 1][j]是当前行左边的累加和。

  • pre[i][j - 1]是当前列上边的累加和。

  • pre[i - 1][j - 1]是左上角重复计算的部分,需要减去。

类比理解: 想象一个棋盘,mat[i][j]是一个棋子的价值,pre[i][j]是从棋盘左上角到(i,j)这个矩形区域内的所有棋子的总价值。我们通过累加左边和上边的总价值,再减去重复计算的左上角部分,得到当前矩形的总价值。

二维前缀和的应用

假设我们要计算矩阵中从(x1, y1)(x2, y2)的子矩阵的和,可以直接通过前缀和数组快速求解: 子矩阵和=pre[x2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值