Arrays 在一个大矩阵中求多个子矩阵的和?
对于2D矩阵a,我们要求从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
(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]