矩阵中可能的矩形数

时间:2013-03-22 09:28:37

标签: algorithm permutation

我正在经历一种计算矩阵区域之和的算法。我读了一个预先计算总和的解决方案,以获得更好的结果。我想计算大小为mXn的2d矩阵中矩形(sub Maxtix)的可能数量。

任何人都可以使用排列和组合解释解决方案。

4 个答案:

答案 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)

Rectangle_counts

您只需选择要包含哪些行和哪些列(参见图片),即可计算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]