【每日一贴】求优化下列二维矩阵乘法
- C/C++ code
//矩阵的乘法#include <iostream>#include <cstdlib>#include <ctime>using namespace std;struct coord{ int i; int j;};int matrix_multi(int matrix1[4][5],struct coord c1,int matrix2[5][6],struct coord c2);int main(int argc,char* argv[]){ int matrix[4][5]; int matrix1[5][6]; int matrix_sum[4][6]; srand(time(0)); cout << "The First Matrix:" << endl; for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ matrix[i][j] = 10*rand()/RAND_MAX; cout << matrix[i][j] << "\t"; cout.flush(); } cout << endl; } cout << endl; cout << "The Second Matrix:" << endl; for(int i=0;i<5;i++){ for(int j=0;j<6;j++){ matrix1[i][j] = 10*rand()/RAND_MAX; cout << matrix1[i][j] << "\t"; cout.flush(); } cout << endl; } struct coord c1;c1.i=4;c1.j=5; struct coord c2;c2.i=5;c2.j=6; matrix_multi(matrix,c1,matrix1,c2); return 0;}int matrix_multi(int matrix1[4][5],struct coord c1,int matrix2[5][6],struct coord c2){ if(c1.j != c2.i){ cout << "您输入的矩阵不符合规则,请输入合法的矩阵进行运算!" << endl; return -1; }else{ cout << "After Multiply:" << endl; int sum = 0; for(int i=0;i<c1.i;i++){ for(int j=0;j<c2.j;j++){ for(int k=0;k<c1.j;k++){ sum += matrix1[i][k]*matrix2[k][j]; } cout << sum << "\t"; cout.flush(); sum = 0; } cout << endl; } return 0; }}让上边二维矩阵乘法高效低存储占用。
1、矩阵必须随机赋值,行列值可自定,但是以减少行列数为优化目标,暂不算优化。(为便于大家学习,尽量采用4,5/5,6矩阵模式)。
2、尽量使用C++模式,可内联AT&T汇编。
3、打印格式不变。
4、编译以GNU工具为基准。
[解决办法]
除了struct coord 格式参数用指针传入
以及
matrix1[i][k] 二维数组用表达式直接算
可以优化的,c++语言层面已经没什么可优化的了吧