行列を浮かべるMサイズnxnそのMをサブマトリクスのサイズbxbに分割しました。例えば、N = 16とB = 8場合、私はサイズ8×8の部分行列を有しています。ここでその関数の実装はうまく動作しています。ブロックを大行列からブロックごとに読み取る
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のためにそれを一般的にしたいと思います。 チュートリアルやコードのサンプルをご利用いただけます。ありがとう。
Cerise Charizard様、私はあなたの努力に感謝しています。 –