动态规划法解矩阵连乘问题(5页).doc
《动态规划法解矩阵连乘问题(5页).doc》由会员分享,可在线阅读,更多相关《动态规划法解矩阵连乘问题(5页).doc(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-动态规划法解矩阵连乘问题实验内容给定n个矩阵A1,A2,.An,其中Ai与Ai+1是可乘的,i=1,2,3。,n-1。我们要计算这n个矩阵的连乘积。由于矩阵乘法满足结合性,故计算矩阵连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则我们可依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。解题思路将矩阵连乘积A(i)A(i+1)A(j)简记为Ai:j,这里 i = j。考察计算Ai:j的最优计算次序。设这个计算次序在矩阵A(k)和A(k+1)之间将矩阵链断开,i = k j, 则其相应完全加括号方式为(
2、A(i)A(i+1)A(k) * (A(k+1)A(k+2)A(j)。特征:计算Ai:j的最优次序所包含的计算矩阵子链 Ai:k和Ak+1:j的次序也是最优的。矩阵连乘计算次序问题的最优解包含着其子问题的最优解。设计算Ai:j,1 = i = j = n,所需要的最少数乘次数mi,j,则原问题的最优值为m1,n 当i = j时,Ai:j=Ai,因此,mi,i = 0,i = 1,2,n当i j时,mi,j = mi,k + mk+1,j + p(i-1)p(k)p(j)这里A(i)的维数为p(i-1)*(i)(注:p(i-1)为矩阵A(i)的行数,p(i)为矩阵Ai的列数)实验实验代码#inc
3、lude #include using namespace std ;class matrix_chainpublic: matrix_chain(const vector & c) cols = c ; count = cols.size () ; mc.resize (count) ; s.resize (count) ; for (int i = 0; i count; +i) mci.resize (count) ; si.resize (count) ; for (i = 0; i count; +i) for (int j = 0; j count; +j) mcij = 0 ;
4、sij = 0 ; / 记录每次子问题的结果 void lookup_chain () _lookup_chain (1, count - 1) ; min_count = mc1count - 1 ; cout min_multi_count = min_count endl ; / 输出最优计算次序 _trackback (1, count - 1) ; / 使用普通方法进行计算 void calculate () int n = count - 1; / 矩阵的个数 / r 表示每次宽度 / i,j表示从从矩阵i到矩阵j / k 表示切割位置 for (int r = 2; r = n;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 规划 矩阵 问题
限制150内