2017-11-22 2 views
0

행렬 행렬 M 크기가 nxn입니다. 그 M을 크기가 인 서브 매트릭스 bxb으로 나눴습니다. 예를 들어, N = 16 및 B = 8 있다면, I는 8 × 8 크기 4 행렬을 갖는다. 여기에 그 함수의 구현은 잘 작동합니다.큰 행렬에서 블록 단위로 블록 읽기

public static int[][] getAcutalBlock(int[][] mat, int row, int col, int number) { 

    /* mat is orignal big matrix of size nxn 
    row is starting index for the block i 
    col is staring index for the block * 
    number is representing block ID either first block, second block or ... 
    */ 

    int[][] block = new int[blockSize][blockSize]; 
    int eRow = row + blockSize; 
    int eCol = col + blockSize; 

    if (number == 0) { // it is for first block 
     for (int i = row; i < eRow; i++) { 
      for (int j = col; j < eCol; j++) { 
       block[i][j] = mat[i][j]; 
      } 
     } 
    } 
    else if(number == totalBlocks-1){ // it is for last block 
     for (int i = row; i < eRow; i++) { 
      for (int j = col; j < eCol; j++) { 
       block[i - blockSize][j - blockSize] = mat[i][j]; 
      } 
     } 
    } 
    else if (isEven(number)) { // if the number is even 
     for (int i = row; i < eRow; i++) { 
      for (int j = col; j < eCol; j++) { 
       block[i - blockSize][j] = mat[i][j]; 
      } 
     } 
    } 
    else { // if the number is odd 
     for (int i = row; i < eRow; i++) { 
      for (int j = col; j < eCol; j++) { 
       block[i][j - blockSize] = mat[i][j]; 
      } 
     } 
    } 
    return block; 
} 

하지만 문제는 동적이지 않다는 것입니다. b이 변경된 경우 을 제외한 중간 블록을 읽는 방법 먼저마지막 블록을 제외한 나머지 블록을 읽는 방법? n 및 임의의 숫자 b에 대해 일반화하고 싶습니다. 자습서 또는 코드 샘플을 제공해 주시면 감사하겠습니다. 감사.

답변