我有一个m×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。只有四个操作,而不是15. 如果我想找到第二和第三行的总和,我只积累15,18,21,24并减去1,2,3,4。 = 6 + 8 + 10 + 12 + 15 + 18 + 21 + 24 = 。 但在这种情况下,我可以用另一种基质,积累这一个由列:
1 3 6 10
5 11 18 26
9 19 30 42
13 27 42 58
在这种情况下我刚总结和 = 。只有2个操作而不是8个。对于更宽的子矩阵来说,使用第二种方法和矩阵是有效的,对于更高的第一个。我可以以某种方式拆分合并这种方法到一个矩阵?
所以我只是总结角落,减去另外两个?
如果有* sum * sum查询遍历整个或部分矩阵,这是有利的。 – mvw
在我的情况下,它是显着的大数目和 – JohnDow
是否有快速的Java实现?如果我这样做brute force =>递归 - 它非常缓慢。 – JohnDow