⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix1.cpp

📁 矩阵乘法的优化程序
💻 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 + -