矩阵连乘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生姓名:王若兰

学号:2013060103029

指导教师:曹晟

日期: 2014 年12 月 6日

一、实验室名称:

主楼A2-412 二、实验项目名称:

用动态规划解决矩阵连乘问题

三、实验原理:

矩阵的结合律:ABC=(AB)C=A(BC) ;

设m

ij

为i到j矩阵的最小乘法次数,则:

当i=j时,m

ij =0;当i

ij

=

j

k

i≤

min

{m k i,+m j

k),

1

(++r

i

r

1+

k

r

1+j

},令k在i<=k<=j

之间取尽所有值,使得m k i,和m j

k),

1

(+最小,进而使得

m

ij

最小。

四、实验目的:

通过动态规划的方法实现矩阵连乘最小用算代价。

五、实验内容:

六、实验器材(设备、元器件):

联想台式计算机R412-LX046. Windows XP 2002版、Microsoft VC++6.0

七、实验步骤:

1、分析问题:了解矩阵连乘的算术方法和乘积顺序;

2、比较穷举法和动态规划的差异及时间复杂度的大小;

3、将问题转化为算法,并将算法以程序形式表示出;

4、运行并改进程序,记录数据并总结。

八、实验数据及结果分析:

#include

#include

#define N 6

void main()

{

long int p[N],m[N][N],s[N][N];

long int i,j,l,k;

for(i=0;i

scanf("%d",&p[i]);

for(i=1;i

{

m[i][j]=0;

s[i][i]=0;

}

for (l=2;l<=7;l++)

for (i=1;i<=N-l;i++)

{

j=i+l-1;

m[i][j]=32765;

for(k=i;k

{

if(m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]

{

m[i][j]=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];

s[i][j]=k;

}

}

}

for(i=1;i<=N;i++)

{

for(j=i;j<=N;j++)

printf("%5d",m[i][j]);

printf("\n");

}

for(i=1;i<=N;i++)

{

for(j=i;j<=N;j++)

printf("%5d",s[i][j]);

printf("\n");

}

}

九、实验结论:

求矩阵乘积最小运算代价的算法体现了动态规划方法的优点:在选解时将k 限制在i<=k<=j的范围内,并且令差值j-i自小而大递增,即先解小的子问题并把解保存起来,然后利用小问题的解来求大的子问题,最后形成整个问题的解。

十、总结及心得体会:

十一、对本实验过程及方法、手段的改进建议

报告评分:

相关文档
最新文档