2017-01-25 9 views
0

は私が最大要素値を保存して行列を減らすにはどうすればよいですか?

int[][] matrix = { 
     // 0  1  2 
     {0,0, 0,0, 0,0}, // 0 
     {0,1, 0,0, 0,0}, 

     {1,1, 0,0, 0,0}, // 1 
     {0,0, 0,0, 0,1} 
}; 

int newCellSize = 2; 

は、私は、セルの最大値を維持しながら、それを減らしたい行列があるとします。例えば、

matrix =>

int[][] reducedMatrix = { 
     {1, 0, 0}, 
     {1, 0, 1} 
}; 

はどのように私はそれを行うことができますか? matrix要素を反復処理し、それらをreducedMatrixセルにマップする方法は?ここで

は私の試みです:

private static int[][] reduceMatrix(int[][] matrix, int cellSize) { 

    int a = (int)ceil((double)matrix.length/cellSize); 
    int b = (int)ceil((double)matrix[0].length/cellSize); 

    int[][] reduced = new int[a][b]; 

    for(int i=0; i < matrix.length; i++){ 
     for(int j=0; j < matrix[i].length; j++){ 

      int n= i/cellSize; 
      int m= j/cellSize; 

      int elem = matrix[i][j]; 

      if(elem > 0){ 
       reduced[n > 0 ? n : 0][m > 0 ? m : 0]=elem; 
      } 
     } 
    } 

    return reduced; 
} 
+0

は、あなたがこれまで試したどのような私たちを見ますか? –

+0

これまでのところ、私はアルゴリズムを開発するためにどの点から始めるべきか分かりません。 – Finkelson

+0

これは2 * 3に縮小された4 * 6マトリックスです。ここでどのくらい正確にセルを定義しますか? – vish4071

答えて

0

コードのこの小さな作品は、トリックを行う必要があります。

int[][] reduceMatrix(int[][] matrix, int cellSize, int rows, int cols) { 
    int [][] reducedMatrix = new int[rows/cellSize][cols/cellSize]; 
    for (int i=0; i<rows; i+=cellSize) { 
     for (int j=0; j<cols; j+=cellSize) { 
      int max=-INF; 
      for (k=i;k<cellSize;k++) 
       for (l=j;l<cellSize;l++) 
        if (matrix[k][l]>max) 
         max=matrix[k][l]; 
      reducedMatrix[i/cellSize][j/cellSize] = max; 
     } 
    } 
    return reducedMatrix; 
} 
関連する問題