在一个大矩阵中找到许多子矩阵的总和?

时间:2018-01-09 22:32:56

标签: arrays algorithm matrix

对于2D矩阵A,我们希望找到从(x1,y1)(x2, y2)坐标的子矩阵之和。

我遇到了查找子矩阵总和的explanation,我可以按照解决方案的逻辑,直到他们执行以下计算的最后一部分:

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

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

假设我们有A:

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?

这个答案有问题吗?

1 个答案:

答案 0 :(得分:1)

在计算您提到的总和后,sum[x][y]将代表(0,0) to (x,y)中矩形的总和。

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

enter image description here