一、实验目的及要求
1、掌握分治法的基本思想;
2、掌握大整数乘法的分治法实现方法;
3、学会用分治法解决实际问题的时间效率。
二、实验内容
编写程序实现:
1、输于两个n×n的矩阵A和B,实现乘积运算,并输出运算结果和计算时间;
2、逐渐增大矩阵A和B的规模,分析运算时间的变化。
3、用分治法的实现矩阵乘积运算,比较使用分治法前后的计算量差异。
#include<iostream>
#include <windows.h>
using namespace std;
#define n 20
void matrix(int a[n][n],int b[n][n]){
//给结果矩阵赋初值
int result[n][n]={0};
//计算矩阵乘积
for(int k=0;k<n;k++){
for(int l=0;l<n;l++){
for(int i=0;i<n;i++){
result[k][l]+=a[k][i]*b[i][l];
}
}
}
//输出结果
cout<<"结果为:"<<endl;
for(int m=0;m<n;m++){
for(int p=0;p<n;p++){
cout<<result[m][p]<<" ";
}
cout<<endl;
}
}
int main(void){
int a[n][n],b[n][n];
cout<<"输入a"<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
//cin>>a[i][j];
a[i][j]=1;
}
}
cout<<"输入b"<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
//cin>>b[i][j];
b[i][j]=1;
}
}
//标记函数开始时间
DWORD start = GetTickCount();
matrix(a,b);
//标记函数结束时间,并算出时间差
DWORD runtime = GetTickCount()-start;
cout<<"算法执行时间为"<<runtime<<endl;
return 0;
}
# 拓展试验 #
理解Strassen算法,并结合分治法实现矩阵A×B的计算,并给出分析时间复杂度