算法设计实验3

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

实验三:动态规划法

【实验目的】

应用动态规划算法思想求解矩阵连乘的顺序问题。

【实验要求】

应用动态规划算法的最优子结构性质和子问题重叠性质求解此问题。分析动态规划算法的基本思想,应用动态规划策略写出算法及相应的程序,求解此题。要读懂读透A[i,j],

A[1,n]=A[1,k] ×A[k+1,n],m[i][j],s[i][j]各式所表达的含义并正确加以应用。m[i][j]的递归定义:

0 (i=j )

m[i][j]=

min{m[i][k]+m[k+1][j]+n i-1n k n j (i

【实验性质】

验证性实验。

【实验内容】

对于下列所描述的问题,给出相应的算法描述,并完成程序实现与时间复杂度的分析。该问题描述为:一般地,考虑矩阵A1,A2,…,An的连乘积,它们的维数分别为d0,d1,…,dn,即Ai的维数为di-1×di (1≤i≤n)。确定这n个矩阵的乘积结合次序,使所需的总乘法次数最少。对应于乘法次数最少的乘积结合次序为这n个矩阵的最优连乘积次序。按给定的一

组测试数据对根据算法设计的程序进行调试:6个矩阵连乘积A=A1×A2×A3×A4×A5×A6,各矩阵的维数分别为:A1:10×20,A2:20×25,A3:25×15,A4:15×5,A5:5×10,A6:10×25。完成测试。

【注意事项】

用C语言或C++实现算法。选择合适的数据结构。注意:是求解完成矩阵连乘的乘法运算次数最少的矩阵连乘次序,而不是求解矩阵连乘的结果。

【调试分析和心得体会】

运行依算法写出的程序并分析算法实现的时间复杂度情况。

#include

#include

class MatrixChain

{

public:

MatrixChain(int mSize); //创建二维数组m和s,一维数组p,并初始化int MChain(); //一般动态规划法求最优解值

int LookupChain(); //备忘录方法求最优解值(程序7-4)

void Traceback(); //构造最优解的公有函数

private:

void Traceback(int i, int j); //构造最优解的私有递归函数

int LookupChain(int i, int j); //备忘录方法私有递归(程序7-4)int *p, **m, **s, n;

};

int MatrixChain::MChain()

{ //求A[0:n-1]的最优解值

for (int i=0;i

for (int r=2; r<=n; r++)

for (int i=0; i<=n-r; i++) {

int j=i+r-1;

m[i][j]=m[i+1][j]+p[i]*p[i+1]*p[j+1]; //m[i][j] 的初值

s[i][j]=i;

for (int k=i+1; k

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

if (t

m[i][j]=t; s[i][j]=k;

}

}

}

return m[0][n-1];

}

void MatrixChain::Traceback(int i, int j)

if(i==j) { cout<<'A'<

if (i

if(s[i][j]+1

void MatrixChain::Traceback()

{

cout<<'('; Traceback(0, n-1); cout<<')';

cout<

}

MatrixChain::MatrixChain(int mSize)

{

n=mSize;

p= new int [n+1];

m= new int *[n];

s=new int *[n];

for(int i=0;i

cout<<"输入矩阵行列值:"<

for(i=0;i

{cin>>p[i];}

void main(void)

{

int n;

cout<<"输入矩阵个数:";

cin>>n;

MatrixChain g(n);

g.MChain();

g.Traceback();

}

答案:

输入矩阵个数:6

输入矩阵行列值:

10×20 20×25 25×15 15×5 5×10 10×25 (((A0A1)A2)(A3(A4A5)))

Press any key to continue

相关文档
最新文档