算法实验之矩阵连乘-实验报告Word文件下载.doc
《算法实验之矩阵连乘-实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《算法实验之矩阵连乘-实验报告Word文件下载.doc(3页珍藏版)》请在冰豆网上搜索。
《算法设计与分析》实验报告(三)
学号:
201210802025姓名:
杨腾佼班级:
信本成绩:
实验名称:
矩阵连乘问题
实验地点:
6a-2
所使用的开发工具及环境:
Visualc++6.0,windows7
一、实验目的
熟悉掌握动态规划法设计技术
二、实验要求
1、按教材所授内容要求,完成“矩阵连乘问题”算法。
得到一个完整正确的程序。
2、问题规模:
不少于20
3、输出最终结果。
三、算法实现
#include<
stdio.h>
stdlib.h>
#defineMAX_MATRIXNUM100
#defineMAX_VALUE32767
Intp[MAX_MATRIXNUM+1],m[MAX_MATRIXNUM+1][MAX_MATRIXNUM+1],s[MAX_MATRIXNUM+1][MAX_MATRIXNUM+1];
staticvoidmatrix_chain(intnum);
staticvoidtraceback(inti,intj);
intmain(intargc,char**argv){
inti,num;
printf("
Inputmatrixnum:
"
);
scanf("
%d"
&
num);
getchar();
Inputmatrixsubscript:
for(i=0;
i<
=num;
i++){
scanf("
p[i]);
}
matrix_chain(num);
traceback(1,num);
\n"
return0;
staticvoidmatrix_chain(intnum){
inti,j,l,k,n,temp;
n=num;
for(i=1;
=n;
m[i][i]=0;
}
for(l=2;
l<
l++){
for(i=1;
=n-l+1;
j=i+l-1;
m[i][j]=MAX_VALUE;
for(k=i;
k<
j;
k++){
temp=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(temp<
m[i][j]){
m[i][j]=temp;
s[i][j]=k;
}
}}
Thelowestcomputetimes=%d\n"
m[1][num]);
staticvoidtraceback(inti,intj){
if(i==j){
printf("
A%d"
i);
if(i<
j){
("
traceback(i,s[i][j]);
traceback(s[i][j]+1,j);
)"
运行结果如下:
四、算法思想
矩阵乘法满足结合律,所以计算矩阵的连乘积可以有不同的计算次序,若一个矩阵的计算次序完全确定,那么矩阵连乘积可以递归地定义为:
单个矩阵是完全加括号的;
矩阵连乘积A是完全加括号的,则A可以表示成2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC)
五、实验结论
本次实验是动态规划的一个应用,矩阵连乘问题主要就是确定矩阵连乘的次序,使得矩阵连乘的次数最少。
指导教师签名:
2014年12月11日