在矩阵中查找最大和子sub =矩形

时间:2010-09-28 14:53:51

标签: algorithm

  

可能重复:
  Getting the submatrix with maximum sum?

给定正整数和负整数的二维数组,找到具有最大总和的子矩形。矩形的总和是该矩形中所有元素的总和。在这个问题中,具有最大和的子矩形被称为最大子矩形。子矩形是位于整个阵列内的任何大小为1 * 1或更大的连续子阵列。例如,数组的最大子矩形:

 0 -2 -7  0
 9  2 -6  2
-4  1 -4  1
-1  8  0 -2

位于左下角:

 9  2
-4  1
-1  8

并且总和为15.

因此给定一个矩形,找到最大子矩形之和的有效算法(上例中为15)。

1 个答案:

答案 0 :(得分:6)

您可以在O(numCols*numLines^2)中解决此问题。在1d中考虑相同的问题:

  

给定n个元素的向量,找到最大和的连续子序列。

S[i] = maximum sum contiguous subsequence that ends with element i。我们有S[1] = array[1]S[i > 1] = max(S[i - 1] + array[i], array[i])

请注意,您不需要向量来解决此问题,两个变量就足够了。更多here

现在,对于矩阵案例,请计算Sum[i][j] = sum of the first i elements of column j

现在,对于矩阵中每对可能的行,将1d算法应用于由当前对的行之间的元素组成的“向量”。