算法实验动态规划矩阵连乘Word格式.docx

上传人:b****3 文档编号:18278768 上传时间:2022-12-15 格式:DOCX 页数:6 大小:40.12KB
下载 相关 举报
算法实验动态规划矩阵连乘Word格式.docx_第1页
第1页 / 共6页
算法实验动态规划矩阵连乘Word格式.docx_第2页
第2页 / 共6页
算法实验动态规划矩阵连乘Word格式.docx_第3页
第3页 / 共6页
算法实验动态规划矩阵连乘Word格式.docx_第4页
第4页 / 共6页
算法实验动态规划矩阵连乘Word格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

算法实验动态规划矩阵连乘Word格式.docx

《算法实验动态规划矩阵连乘Word格式.docx》由会员分享,可在线阅读,更多相关《算法实验动态规划矩阵连乘Word格式.docx(6页珍藏版)》请在冰豆网上搜索。

算法实验动态规划矩阵连乘Word格式.docx

按给定的一组测试数据对根据算法设计的程序进行调试:

6个矩阵连乘积A=A1×

A2×

A3×

A4×

A5×

A6,各矩阵的维数分别为:

A1:

10×

20,A2:

20×

25,A3:

25×

15,A4:

15×

5,A5:

10,A6:

25。

完成测试。

【算法思想及处理过程】

Main()函数:

定义二维数组m用来存放最优解;

定义二维数组s用来存放最优解的断开点;

定义一维数组p用来存放矩阵维数.

MatrixChain函数:

首先通过for循环,给二维数组M和S的对角线赋值为0(表示只有一个矩阵,没有相乘的).然后通过for循环,求出最优解(这只是假定的最优解)和断开点(这只是假定的最完美的断开点),再通过双重for循环在后面找到了一个最优解,判断后一个最优解是不是比前一个最优解小(也就是更优,更好),如果小,则将前最优解改为后一个的最优解,并且将前断开点改为后一个的断开点,然后重复此操作.

 

【程序代码】

#include<

stdio.h>

voidMatrixChain(intp[],intm[][6],ints[][6],intn);

//求最优解和断开点

voidprint1(intm[][6],ints[][6],intp[]);

//打印矩阵,最优解,断开点

voidprint2(inti,intn,ints[][6]);

//打印加括号的断开矩阵

intmain()

{

intp[7]={10,20,25,15,5,10,25};

intm[6][6],s[6][6];

MatrixChain(p,m,s,6);

print1(m,s,p);

printf("

\n\n矩阵连乘次数的最优值为:

\n"

);

-----------------------------------------------\n"

print2(0,6-1,s);

\n-----------------------------------------------\n\n"

return0;

}

voidMatrixChain(intp[],intm[][6],ints[][6],intn)

inti,j,k,z,t;

for(i=0;

i<

n;

i++)

{

m[i][i]=0;

s[i][i]=0;

}

for(z=2;

z<

=n;

z++)

for(i=0;

=n-z;

j=i+z-1;

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

s[i][j]=i;

for(k=i+1;

k<

j;

k++)

{

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

if(t<

m[i][j])

{

m[i][j]=t;

s[i][j]=k;

}

}

}

voidprint1(intm[][6],ints[][6],intp[])

inti,j;

\n\n程序所给矩阵如下:

6;

i++)

printf("

A%d矩阵:

%2dX%-2d\n"

i+1,p[i],p[i+1]);

\n\n-----------------------------------------------\n"

printf("

矩阵的最少计算次数为:

%d\n"

m[0][5]);

\n\n数乘次数:

\n"

for(j=0;

j<

i;

j++)

printf("

"

for(j=i;

%-7d"

m[i][j]);

\n\n中间断点:

s[i][j]);

voidprint2(inti,intn,ints[][6])

if(i==n)

A%d"

i);

elseif(i+1==n)

(A%dA%d)"

i,n);

else{

("

print2(i,s[i][n],s);

print2(s[i][n]+1,n,s);

)"

【运行结果】

【算法分析】

函数MatrixChain()包含三重循环,循环体内的计算量为O

(1),所以算法的时间复杂度为O(n3),算法的空间时间复杂度为O(n3).

【实验总结】

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1