我有一个大矩阵作为输入,我有一个较小矩阵的大小。我必须计算所有可能的较小矩阵的总和,这些矩阵可以由较大的矩阵形成。
例子。输入矩阵大小: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;
}
我想这太慢了,有人可以建议一个更快的方法吗?