入力として大きな行列があり、小さな行列のサイズがあります。大きな行列から形成できるすべての可能な小さな行列の合計を計算する必要があります。
例。入力行列サイズ: 4 × 4
マトリックス:
1 2 3 4
5 6 7 8
9 9 0 0
0 0 9 9
入力より小さい行列サイズ: 3 × 3 (必ずしも正方形である必要はありません)
より小さな行列が可能:
1 2 3
5 6 7
9 9 0
5 6 7
9 9 0
0 0 9
2 3 4
6 7 8
9 0 0
6 7 8
9 0 0
0 9 9
それらの合計、最終出力
14 18 22
29 22 15
18 18 18
これは私がしました:
int** matrix_sum(int **M, int n, int r, int c)
{
int **res = new int*[r];
for(int i=0 ; i<r ; i++) {
res[i] = new int[c];
memset(res[i], 0, sizeof(int)*c);
}
for(int i=0 ; i<=n-r ; i++)
for(int j=0 ; j<=n-c ; j++)
for(int k=i ; k<i+r ; k++)
for(int l=j ; l<j+c ; l++)
res[k-i][l-j] += M[k][l];
return res;
}
これは遅すぎると思います。誰かがより速い方法を提案できますか?