Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代NxN矩阵的所有子矩阵的最佳/最快方法_Java_Algorithm_Matrix - Fatal编程技术网

Java 迭代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

我有一个方形板(NxN矩阵)。每个正方形(单元)都有与其关联的特定点。我的目标是找到最大的子矩阵,它具有最高的点和。我首先尝试找到所有的子矩阵和它们的权重。但我被困在如何着手做这件事上

我想我可以有一个
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的算法?