Java 迭代NxN矩阵的所有子矩阵的最佳/最快方法
我有一个方形板(NxN矩阵)。每个正方形(单元)都有与其关联的特定点。我的目标是找到最大的子矩阵,它具有最高的点和。我首先尝试找到所有的子矩阵和它们的权重。但我被困在如何着手做这件事上 我想我可以有一个Java 迭代NxN矩阵的所有子矩阵的最佳/最快方法,java,algorithm,matrix,Java,Algorithm,Matrix,我有一个方形板(NxN矩阵)。每个正方形(单元)都有与其关联的特定点。我的目标是找到最大的子矩阵,它具有最高的点和。我首先尝试找到所有的子矩阵和它们的权重。但我被困在如何着手做这件事上 我想我可以有一个HashMap,它存储初始行、列和子矩阵的大小。代码应该如下所示: int [][] mat = new int[10][10]; void countSubMatrix() { for(int i = 0; i<mat.length; i++) { for
HashMap
,它存储初始行、列和子矩阵的大小。代码应该如下所示:
int [][] mat = new int[10][10];
void countSubMatrix()
{
for(int i = 0; i<mat.length; i++)
{
for(int j = 0; j<mat[i].length; j++)
{
storeSubMatrix(i,j);
}
}
}
void storeSubMatrix(int x, int y)
{
int size = 0;
int tempX = x;
int tempY = y;
while(tempX < board.length && tempY < board[x].length)
{
map.put(x.toString() + "," + y.toString(),size+1);
tempX++;
tempY++;
}
}
int[]mat=newint[10][10];
void countSubMatrix()
{
对于(int i=0;i最大的子矩阵,也就是说,它也可以是一个矩形,那么可能对您有所帮助。使用kadane的矩阵算法,它可以在O(n^3)中完成
子矩阵也必须是正方形吗?它们可以是小于NxN的任意大小吗?单元格值可以是负值吗?它们也必须是正方形。是的,任何大小都必须小于NxN。在我的游戏中,没有负值,但这是一个好问题。如果单元格有负值,那又有什么关系呢?@noMAD:如果没有负值v值,答案是平凡的-完整矩阵[根据定义,它本身也是一个子矩阵]与它的任何子矩阵相比,它的总和都不小——因此它是最大的。然而,我怀疑这是你真正想要的……找到所有的子矩阵听起来像是递归的工作。但是正如其他人所说的,它可能不会让你在更大的范围内得到你想要的东西?@amit:这是真的。我很傻。我需要改变我的设计中有e的东西。不管怎样,我的矩阵中会有负数。你能详细说明O(n^2)的解决方案吗?@noMAD,对不起,我把这和其他问题混淆了。我认为在不到O(n^3)的情况下是不可能的。好吧,我想知道如何在O(n^3)中实现它?你将如何在这里应用Kadane的算法?