Javascript 作为单位矩阵的最大子矩阵

Javascript 作为单位矩阵的最大子矩阵,javascript,algorithm,Javascript,Algorithm,我试图找到最大的子矩阵,它是一个单位矩阵。我不知道如何浏览所有可能的子矩阵。然而,我成功地提出了一个函数,确定矩阵是否为恒等式: function isIdentityMatrix(matrix) { for (var i = 0; i < matrix.length; i++) { for (var j = 0; j < matrix.length; j++) { if (matrix[i][j] !== 1 && i === j || m

我试图找到最大的子矩阵,它是一个单位矩阵。我不知道如何浏览所有可能的子矩阵。然而,我成功地提出了一个函数,确定矩阵是否为恒等式:

function isIdentityMatrix(matrix) {

  for (var i = 0; i < matrix.length; i++) {
    for (var j = 0; j < matrix.length; j++) {
      if (matrix[i][j] !== 1 && i === j || matrix[i][j] && i !== j) {
        return false;
      }
    }
  }
  return true;
}
函数isIdentityMatrix(矩阵){
对于(变量i=0;i

在所有子矩阵中循环的任何帮助都将不胜感激。请记住,我是javascript的新手。

您可以尝试以下内容。这个节目

-查找子矩阵 -如果martrix是否为identity,则返回true

注意:这仅适用于nxn矩阵,但可以轻松调整以使用nxm矩阵

   let arr=[

[1,1,1,0,0],
[0,1,1,0,0],
[0,0,1,0,0],
[1,0,1,1,0],
[0,0,0,1,1]

];

let finalValue=0;
 let n=arr.length;

 let N=2;//size of submatrices

 function subMatrix(k,n,N,arr)
{


    let max_k_x=n-N+1;// per row max value of k
    let row=Math.floor(k/max_k_x);
    let col=k%max_k_x;


    /* 
      k=6,n=4,N=2
      max_k=(4-2+1)*(4-2+1)=9
      max_k_x=3
      row=2(starting from zero)
      col=0
    */

let matrix=new Array();

for(let i=row;i<row+N;i++){
  for(let j=col;j<col+N;j++){

    matrix.push(arr[i][j]);

  }
}

return matrix;
}

 function doSomethingWithMatrix(matrix,N){

for(let i=0;i<matrix.length;i++){

        if((matrix[i] && (i%(N+1)!==0))||(matrix[i]!==1 && (i%(N+1))===0)){

     return false;


    }

    }





 return true;
}

 for(let k=0;k<(n-N+1)*(n-N+1);k++){//k can vary from 0 to (((n-N+1)^2)-1)

     let matrix=new Array();
  matrix=subMatrix(k,n,N,arr);
 // console.log(doSomethingWithMatrix(matrix,N));
   //  console.log("   ");
if(doSomethingWithMatrix(matrix,N)){

        finalValue=N;
         N++;
         k=0;
         if(N===n){
             N--;
             break;
         }

     }
     if(k===(n-N+1)*(n-N+1)-1){
         N++;
     }
     matrix=[];

}
console.log("final N: "+finalValue);
let-arr=[
[1,1,1,0,0],
[0,1,1,0,0],
[0,0,1,0,0],
[1,0,1,1,0],
[0,0,0,1,1]
];
设finalValue=0;
设n=arr.length;
设N=2//子矩阵的大小
函数子矩阵(k,n,n,arr)
{
设max_k_x=n-n+1;//每行k的最大值
设行=数学楼层(k/max_k_x);
设col=k%max_k_x;
/* 
k=6,n=4,n=2
max_k=(4-2+1)*(4-2+1)=9
max_k_x=3
行=2(从零开始)
col=0
*/
让矩阵=新数组();

for(让i=row;我在输入矩阵中查找
1
,并尝试尽可能多地增长子矩阵,直到它不再是标识。@Nico Schertler应该可以工作,但它现在对我来说有点太高级了。