Arrays 在一个大矩阵中求多个子矩阵的和?

Arrays 在一个大矩阵中求多个子矩阵的和?,arrays,algorithm,matrix,Arrays,Algorithm,Matrix,对于2D矩阵a,我们要求从(x1,y1)到(x2,y2)坐标的子矩阵的和 我遇到了寻找子矩阵和的问题,我可以遵循解决方案的逻辑,直到最后一部分,他们执行以下计算: sum[x2][y2]+sum[x1][y1]-sum[x1][y2]-sum[x2][y1] 其思想是,他们计算一个矩阵,其中每个点表示矩阵的和,所有这些都参考原始x1,y1为(0,0)。然后使用一些几何方法,得到某个子数组的和。我不明白的是几何部分。它是如何发挥作用的?为了完整起见,我将绘制数组 假设我们有这样一个: 1 2

对于2D矩阵a,我们要求从
(x1,y1)
(x2,y2)
坐标的子矩阵的和

我遇到了寻找子矩阵和的问题,我可以遵循解决方案的逻辑,直到最后一部分,他们执行以下计算:

sum[x2][y2]+sum[x1][y1]-sum[x1][y2]-sum[x2][y1]

其思想是,他们计算一个矩阵,其中每个点表示矩阵的和,所有这些都参考原始x1,y1为(0,0)。然后使用一些几何方法,得到某个子数组的和。我不明白的是几何部分。它是如何发挥作用的?为了完整起见,我将绘制数组

假设我们有这样一个:

1  2  3


4  5  6


7  8  9
例如,假设在找到矩阵和之后,我们有以下内容:

1  3  6


5  12  21


12  27  45
假设我想找到从(1,1)到(2,2)的子数组的和,其中(0,0)是和10处的原点。然后根据公式,我们得到了和

A[2][2]+A[1][1]-A[1][2]-A[2][1]

也就是说12+45-27-21=9

哪一个不是正确答案,28


这个答案有问题吗?

计算完您提到的总和后,
sum[x][y]
将表示从
(0,0)到(x,y)
的矩形总和

现在我们要计算子数组的和,从
(x1,y1)到(x2,y2)
。我们从
sum[x2][y2]
开始。我们需要减去
sum[x1-1][y2]
sum[x2][y1-1]
,因为它们不属于所需的矩形。但是,请注意,红色矩形被减去两次,因此我们添加
sum[x1-1][y1-1]


它实际上是sum[x2][y2]+sum[x1-1][y1-1]-sum[x1-1][y2]-sum[x2][y1-1]