资源描述:
《矩阵连乘重叠和备忘录》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、#include#include//预设宽度setw()函数usingnamespacestd;intm[10][10],s[10][10];intp[10]={30,35,15,5,10,20,25,};//数据预设//函数申明voidMatrixMultiply(inta[][10],intb[][10],intc[][10],intra,intca,intrb,intcb);voidMatrixChain(intp[],intn,intm[][10],int
2、s[][10]);voidTraceback(inti,intj,ints[][10]);voidOutput(intn,intm[][10],ints[][10]);intRecurMatrixChain(inti,intj);intMemoizedMatrixChain(intn,intm[][10],ints[][10]);intLookupChain(inti,intj);intmain(){intch,c=1;//ch用来标记排序方法的序号intn=6;//设置为6个矩阵连乘while(c!
3、=0){cout<>ch;cout<4、;//最优计算次序break;case2:RecurMatrixChain(1,n);//递归直接//Output(n,m,s);Traceback(1,n,s);break;case3:MemoizedMatrixChain(n,m,s);//备忘录//Output(n,m,s);Traceback(1,n,s);break;default:cout<<"选择范围是1~3,重新输入:"<5、,intc[][10],intra,intca,intrb,intcb){if(ca!=rb)//Ai的列≠Ai+1的行cout<<"矩阵不可乘!";for(inti=0;i6、r(inti=1;i<=n;i++)m[i][i]=0;for(intr=2;r<=n;r++)for(inti=1;i<=n-r+1;i++){intj=i+r-1;m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];s[i][j]=i;for(intk=i+1;k7、ints[][10])//最优计算次序{if(i==j)return;//单个矩阵Traceback(i,s[i][j],s);Traceback(s[i][j]+1,j,s);cout<<"MultiplyA"<
8、MatrixChain(i+1,j)+p[i-1]*p[i]*p[j];s[i][j]=i;for(intk=i+1;k