下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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(
3、i)的行数,p(i)为矩阵Ai的列数)实验实验代码#include <iostream>#include <vector>using namespace std ;class matrix_chainpublic: matrix_chain(const vector<int> & c) cols = c ; count = cols.size () ; mc.resize (count) ; s.resize (count) ; for (int i = 0; i < count; +i) mci.resize (count) ; si.res
4、ize (count) ; for (i = 0; i < count; +i) for (int j = 0; j < count; +j) mcij = 0 ; sij = 0 ; / 记录每次子问题的结果 void lookup_chain () _lookup_chain (1, count - 1) ; min_count = mc1count - 1 ; cout << "min_multi_count = "<< min_count << endl ; / 输出最优计算次序 _trackback (1, coun
5、t - 1) ; / 使用普通方法进行计算 void calculate () int n = count - 1; / 矩阵的个数 / r 表示每次宽度 / i,j表示从从矩阵i到矩阵j / k 表示切割位置 for (int r = 2; r <= n; + r) for (int i = 1; i <= n - r + 1; + i) int j = i + r - 1 ; / 从矩阵i到矩阵j连乘,从i的位置切割,前半部分为0 mcij = mci+1j + colsi-1 * colsi * colsj ; sij = i ; for (int k = i + 1; k
6、< j; + k) int temp = mcik + mck + 1j + colsi-1 * colsk * colsj ; if (temp < mcij) mcij = temp ; sij = k ; / for k / for i / for r min_count = mc1n ; cout << "min_multi_count = "<< min_count << endl ; / 输出最优计算次序 _trackback (1, n) ; private: int _lookup_chain (int i,
7、int j) / 该最优解已求出,直接返回 if (mcij > 0) return mcij ; if (i = j) return 0 ; / 不需要计算,直接返回 / 下面两行计算从i到j按照顺序计算的情况 int u = _lookup_chain (i, i) + _lookup_chain (i + 1, j) + colsi-1 * colsi * colsj ; sij = i ; for (int k = i + 1; k < j; + k) int temp = _lookup_chain(i, k) + _lookup_chain(k + 1, j) + co
8、lsi - 1 * colsk * colsj ; if (temp < u) u = temp ; sij = k ; mcij = u ; return u ; void _trackback (int i, int j) if (i = j) return ; _trackback (i, sij) ; _trackback (sij + 1, j) ; cout <<i << "," << sij << " " << sij + 1 << "," &
9、lt;< j << endl; private: vector<int> cols ; / 列数 int count ; / 矩阵个数 + 1 vector<vector<int> > mc; / 从第i个矩阵乘到第j个矩阵最小数乘次数 vector<vector<int> > s; / 最小数乘的切分位置 int min_count ; / 最小数乘次数 ;int main() / 初始化 const int MATRIX_COUNT = 6 ; vector<int> c(MATRIX_COUNT + 1) ; c0 = 30 ; c1 = 35 ; c2 = 15 ; c3 = 5 ; c4 = 10 ; c5 = 20 ; c6 = 25 ; matrix_chain mc (c) ; / mc.calculate () ; mc.lookup_chain () ; return 0 ;实验结果实验验证连乘矩阵假如为:计算过程为:从m可知最小连乘次数为m16 =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兰州资源环境职业技术大学《液压流体力学》2023-2024学年第一学期期末试卷
- 济宁职业技术学院《传播效果监测》2023-2024学年第一学期期末试卷
- 湖南幼儿师范高等专科学校《结构耐久性理论》2023-2024学年第一学期期末试卷
- 湖南工业大学科技学院《婴幼儿艺术发展与教育》2023-2024学年第一学期期末试卷
- 衡阳科技职业学院《地理信息系统A》2023-2024学年第一学期期末试卷
- 湖南交通职业技术学院《生物医药文献检索和专业英语》2023-2024学年第一学期期末试卷
- 浙江师范大学《发酵工程制造技术及应用》2023-2024学年第一学期期末试卷
- 郑州体育职业学院《工业设计专业导论》2023-2024学年第一学期期末试卷
- 浙江工贸职业技术学院《短视频策划与运营》2023-2024学年第一学期期末试卷
- 食品中重金属残留的控制手段
- 2024-2025学年成都高新区七上数学期末考试试卷【含答案】
- 定额〔2025〕1号文-关于发布2018版电力建设工程概预算定额2024年度价格水平调整的通知
- 2025年浙江杭州市西湖区专职社区招聘85人历年高频重点提升(共500题)附带答案详解
- 《数学广角-优化》说课稿-2024-2025学年四年级上册数学人教版
- “懂你”(原题+解题+范文+话题+技巧+阅读类素材)-2025年中考语文一轮复习之写作
- 2025年景观照明项目可行性分析报告
- 2025年江苏南京地铁集团招聘笔试参考题库含答案解析
- 2025年度爱读书学长参与的读书项目投资合同
- 电力系统分析答案(吴俊勇)(已修订)
- 化学-河北省金太阳质检联盟2024-2025学年高三上学期12月第三次联考试题和答案
- 期末复习试题(试题)-2024-2025学年四年级上册数学 北师大版
评论
0/150
提交评论