- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划课程设计(矩阵链乘问题)
动态规划程序设计
实验目的:掌握并实现动态规划算法。
实验内容:对维数为序列(5,10,3,12,5,50,6)的各矩阵。找出其矩阵链乘的一个最优加全括号。
实验要求:利用动态规划思想写出算法的伪代码和C程序代码
(一)算法思想
穷举所有的计算次序,且对每一计算次序确定其乘法次数。由此可找出n个矩阵进行连乘积A1A2…An的最小乘法次数。
将矩阵链乘积简记为A[i:j] ,这里i≤j
考察计算A[i:j]的最优计算次序。设这个计算次序在矩阵Ak和Ak+1之间将矩阵链断开,i≤kj,则其相应完全加括号方式为
计算量:A[i:k]的计算量加上A[k+1:j]的计算量,再加上A[i:k]和A[k+1:j]相乘的计算量
设计算A[i:j],1≤i≤j≤n,所需要的最少数乘次数m[i,j],则原问题的最优值为m[1,n]
当i=j时,A[i:j]=Ai,因此,m[i,i]=0,i=1,2,…,n
当ij时,
可以递归地定义m[i,j]为:
k位置只有j-i种可能
(二)程序代码
//动态规划
import java.io.*;
public class Testsuanfa {
public final int len = this.GetN()+1;
public int[] A = new int[len];
public double[][] M = new double[len][len];
public double[][] S = new double[len][len];
//取得用户需要规划的矩阵连乘的个数。
public int GetN(){
int dvalue = 0;
String value;
System.out.println(请输入连乘矩阵个数: );
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
try {
value = bfr.readLine();
dvalue =Integer.parseInt(value);
//捕捉输入异常
} catch (IOException e) {
System.out.println(输入出错了,请重新输入:);
System.exit(0);
}catch (NumberFormatException e2) {
System.out.println(请输入正确的数字!!);
System.exit(0);
}
return dvalue;
}
//输入矩阵的序列
public int GetA(){
int dvalue = 0;
String value;
System.out.println(请输入分别矩阵维数序列: );
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
try {
value = bfr.readLine();
dvalue =Integer.parseInt(value);
//捕捉输入异常
} catch (IOException e) {
System.out.println(输入出错了,请重新输入:);
System.exit(0);
}catch (NumberFormatException e2) {
System.out.println(请输入正确的数字!!);
System.exit(0);
}
return dvalue;
}
public void f(){
//调用GetA方法,拿到每个序列值
for(int i=0;ilen;i++){
A[i] = this.GetA();
}
for(int i=0;ilen;i++){
M[i][i] = 0;
}
//依次从长度为2到len,求解每一个长度的最有加全括号。
for(int l=2;llen;l++){
for(int i=1;ilen-l+1;i++){
int j = i+l-1;
M[i][j] = Double.MAX_VALUE;
for(int m=i;mj;m++){
double temp = M[i][m]+M[m+1][j]+A[i-1]*A[m]*A[j];
if(tempM[i][j]){
M[i][j] = temp;
您可能关注的文档
- 高级镀银镜项目商业计划书(2013年融资成功案例范文)-协助企业融资-投资专家免费咨询.pdf
- 《长方形和正方形的周长.ppt
- 涂料早9点:船舶涂料需求高涨促进市场发展.ppt
- 2011年高一生物学案:1.1《从生物圈到细胞.doc
- 散装水彩颜料调色料项目融资商业计划书-专家免费咨询.pdf
- 茅坪场镇母婴店:使用双手越频繁宝宝就越聪明.doc
- 职代岗流程梳1.pptx
- 如何编制发改委立项用(甲级)全威力迪项目可行性研究报告(可研报告+甲级+立项+贷款).pdf.pdf
- 最新人教版角的初步认识教案.doc
- 给予我完美的翅膀.doc
- DB3205T 1033-2021 旅游咨询服务机构评价规范.docx
- DB21T 2227.10-2014 辽菜 第10部分:扒三白.docx
- DB21_T 2227.9-2014 辽菜 第9部分:小鸡炖蘑菇.docx
- DB22_T 884-2011 喀尔巴阡蜜蜂.docx
- DB22_T 886-2011 卡尼鄂拉蜜蜂.docx
- DB22_T 989-2011 高加索蜜蜂(标准规范).docx
- DB22_T 885-2011 意大利蜜蜂(标准规范).docx
- DB3203T1009-2021窖栽韭黄生产技术规程.docx
- DB3210_T 1105-2022 扬粳3012种子生产技术规程.docx
- DB3210_T 1103-2022 乡村小微湿地修复规范.docx
文档评论(0)