【问题标题】:Find the largest-sum sub-matrix找到最大和子矩阵
【发布时间】:2012-09-05 04:49:48
【问题描述】:

1. 我有一个二维数组,代表一个矩阵。我需要找到一个总和最大的 square 子矩阵。子矩阵的大小是行数或列数除以 2。例如,如果我有这个

9 3 5 9
2 5 9 8
8 4 9 7
9 5 3 9

最大的子矩阵将是

9 8
9 7

因为它的总和最大。


2. 其次,我需要找到具有排列的最大子矩阵。我的意思是,我需要选择具有子矩阵形状的最大数字(同一列或同一行中至少两个数字)。例如对角线上的四个九

9 9
9 9

但我不能取第一行并制作一个矩阵,因为它确实具有矩阵的形状。

我还在为此苦苦挣扎,所以请帮助我。

这是我的代码,subm 是子矩阵的大小

for (i=0;i<rows-subm;i++){
          for(j=0;j<colums-subm;j++)
          {
             temp=pic[i][j]+pic[i][j+1]+pic[i+1][j]+pic[i+1][j+1];
             if(temp > summax)
                 summax=temp;
          }
 }

【问题讨论】:

  • 用毛绒玩具聊一聊。你知道什么?你需要什么来解决这个问题?最重要的是,您有什么代码可以保证您找到子矩阵的最大值?我认为 9 8 9 7 将是最大的子矩阵。
  • 对于第 1 部分,您需要寻找所有可能的子矩阵。您可以选择递归或寻找动态编程。这是标准问题。
  • 顺便说一句,在你的例子中放一些负数......如果矩阵总是正数,你只需要考虑最大的平方子矩阵。 :)

标签: java


【解决方案1】:

使用矩阵行列式计算方法。看看这个example。 2x2 矩阵的行列式将计算为

a b

c d

ad-cb

Instead use a+b+c+d

将示例中的 2x2 矩阵计算替换为

result = mat[0][0] + mat[1][1] + mat[0][1] + mat[1][0]; 

记录所有这些值并从中找出最大值

【讨论】:

  • 谢谢大家。非常感谢。
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 2019-09-27
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
相关资源
最近更新 更多