【问题标题】:Finding the maximum-sum sub=rectangle within a matrix [duplicate]在矩阵中找到最大和子=矩形[重复]
【发布时间】:2011-04-18 08:40:12
【问题描述】:

可能重复:
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)的有效算法是什么。

【问题讨论】:

  • 这听起来像是一道作业题。如果我为你做,我会得到一个金星贴纸吗?
  • 绝对是一道作业题。
  • @FrustratedWithFormsDesigner:不。我在上周的编程比赛中遇到了这个问题。努力弄清楚逻辑,但徒劳无功。期待有人能阐明...
  • @user441575:哦,好的。将来,您可能需要引用来源,这样人们就不会认为这是家庭作业,并且更愿意提供帮助(因为这个看起来像是从作业表中逐字复制的)。
  • Matrix,Neo 的最大尺寸是多少?

标签: algorithm


【解决方案1】:

您可以在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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多