📄 matrix1.cpp
字号:
#include <iostream>
#include <vector>
#include <time.h>
using namespace std;
int main()
{
clock_t start, finish;
clock_t start1, finish1;
int i,j,k;
//初始化两个1000*1000的矩阵
int (*a)[1000],(*b)[1000];
int (*temp)[1000];
a = new int[1000][1000];
b = new int[1000][1000];
temp = new int [1000][1000];
memset(temp,0,1000*1000*sizeof(int));
for(i = 1; i < 1000; i++)
{
for(j = 0; j < 1000; j++)
{
a[i][j] = i % (j+1);
b[i][j] = i / (j+1);
}
}
//存放A*B的结果
int (*c)[1000],(*d)[1000];
c = new int[1000][1000];
d = new int[1000][1000];
//初始化为0
memset(c,0, 1000*1000*sizeof(int));
memset(d,0, 1000*1000*sizeof(int));
//cout<<"hello"<<endl;
start = clock();
// cout<<start<<endl;
for(i = 0; i < 1000; i++)
{
for(j = 0; j < 1000; j++)
{
for (k = 0; k < 1000; k++)
{
c[i][j] += a[i][k] * b[k][j];
}
}
}
finish = clock();
// cout<<finish-start<<endl;
start1 = clock();
//cout<<"hello"<<endl;
//可以修改的部分 开始
//======================================================
//利用矩阵的转置:
start1 = clock();
//直接利用相乘即可:
for(int i=0;i<1000;i++)
for(int j=0;j<1000;j++)
temp[i][j]=b[j][i];
for(int i=0;i<1000;i++)
for(int j=0;j<1000;j++)
for(int k=0;k<1000;k++)
d[i][j]+=a[i][k]*temp[j][k];
finish1 = clock();
//可以修改的部分 结束
//======================================================
//对比两次的结果
for(i = 0; i < 1000; i++)
{
for(j = 0; j < 1000; j++)
{
if (c[i][j] != d[i][j])
{
cout<<"you have got an error in algorithm modification!"<<endl;
exit(1);
}
}
}
cout<<"time spent for original method : "<<finish - start<<" ms"<<endl;
cout<<"time spent for new method : "<<finish1 - start1<<" ms"<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -