【发布时间】:2014-02-28 13:06:05
【问题描述】:
我有一个 m x n 矩阵,并且希望能够计算任意矩形子矩阵的总和。对于给定的矩阵,这将发生多次。我应该使用什么数据结构?
例如我想在矩阵中找到矩形的总和
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
总和是 68。
我要做的是逐行累积:
1 2 3 4
6 8 10 12
15 18 21 24
28 32 36 40
然后,如果我想找到矩阵的总和,我只需累积 28,32,36,40 = 136。只有 4 次操作而不是 15 次。 如果我想找到第二行和第三行的总和,我只需累积 15,18,21,24 并减去 1, 2, 3, 4. = 6+8 +10+12+15+18+21+24 = 68。 但在这种情况下,我可以使用另一个矩阵,按列累加:
1 3 6 10
5 11 18 26
9 19 30 42
13 27 42 58
在这种情况下,我只是将 26 和 42 = 68 相加。只有 2 次操作而不是 8 次。对于更宽的子矩阵,使用第二种方法和矩阵是有效的,对于更高的 - 第一种。我可以以某种方式将其拆分为一个矩阵的方法吗?
所以我只是对角求和并减去另外两个?
【问题讨论】: