我正在经历一种计算矩阵区域之和的算法。我读了一个预先计算总和的解决方案,以获得更好的结果。我想计算大小为mXn的2d矩阵中矩形(sub Maxtix)的可能数量。
任何人都可以使用排列和组合解释解决方案。
答案 0 :(得分:2)
首先从最简单的案例开始:
Start with m x n, thats 1 rectangle.
Reduce n by 1, that gives another 2.
Reduce n by 1, that gives another 3.
Reduce n by 1, that gives another 4.
你看到了模式吗?
当n下降到1时,从m中减去1,然后重新开始:
Start with m-1 x n, thats 2 rectangles.
Reduce n by 1, that gives another 4.
Reduce n by 1, that gives another 6.
Reduce n by 1, that gives another 8.
你看到的模式了吗??
现在你推断为m-2,m-3,m-4,......,1。
现在从开头开始先减少n,然后是n(或简单地将所有结果加倍,除了mxn)。
所有这些结果的总和就是你的答案。
答案 1 :(得分:1)
这不是算法,而是计数问题。 尝试计算1X1矩阵和1X2 2X1 3X2等矩形的数量然后你会看到
num_of_rect(mXn) = sum(i*j) for 0<i<m+1; 0<j<n+1
在python中:
def countRect(n,m):
return sum([i*j for i in xrange(n+1) for j in xrange(m+1)])
if __name__ == "__main__":
print countRect(2,3)
给出18
答案 2 :(得分:1)
您只需选择要包含哪些行和哪些列(参见图片),即可计算a,b> = 2的所有矩形a * b:
C(m,2)*C(n,2)
您可以使用&gt; = 2来计算* 1个矩形
C(m,2)*n
和1 * b矩形,b> = 2,通过
m*C(n,2)
和1 * 1矩阵通过:
m*n
所以添加这些作为最终答案:
C(m,2)*C(n,2) + C(m,2)*n + m*C(n,2) + m*n
答案 3 :(得分:1)
m x n矩阵中任何大小的可能矩形数
mn +(m-1)(n-1)+(m-2)(n-1)+ .. +(m-m + 1)(n-1)+(m-1)(m -2)+ .. +(mm)(nn)
[0,m]中i的总和{i * j}; j在[0,n]
中