算法设计与分析实验五.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析实验五

实验五 一、实验目的与要求 1、了解动态规划的四个步骤; 2、对最优子结构性质的理解; 3、对具体问题进行动态规划的方法; 4、掌握矩阵连乘的算法实质; 二、实验题 假定有{A1,A2,…An}个矩阵,其中矩阵Ai与Ai+1可乘,请编程实现使矩阵乘法次数最少的加括号解!(用动态规划算法) 程序代码: package Cy; public class MatEven { public static void main(String[] args) { int[] Dim = {30,35,35,15,15,5,5,6,10,20,30,25}; int result = MatEven(Dim); System.out.println(\n动态规划求的的最优策略相乘顺序导致的最少乘法数为: + result); } public static int MatEven(int[] Dim){ //接受n个矩阵的维度数组Dim大小为2n int n = Dim.length / 2; //有n个矩阵,编号0...n-1,编号为k的矩阵的维数是Dim[2k] * Dim[2k+1] int[][] Result = new int[n][n]; //最小代价矩阵 //初始化 for(int i = 0;i n;i++) Result[i][i] = 0; //沿对角线填矩阵 for(int d = 1;d = n-1;d++) //共n-1条对角线需要填 { for(int i = 0;i = n-d-1;i++) //第d条对角线的第一个点横为d { //int j = i - d; int j = i + d; //在第d条对角线上的点,横纵坐标的关j=i+d //这样就确定了一个位置(i,j)的坐标,然后来填(i,j) int Min = 1000000000; for(int k = i;k = j-1;k++) //从第k个矩阵后面断开 { //动态规划状态转移方程 int temp = Result[i][k] + Result[k+1][j] + (Dim[2*i] * Dim[2*k + 1] * Dim[2*j+1]); if( temp Min) Min = temp; } Result[i][j] = Min; } } return Result[0][n-1]; } } 实验结果: 测试数组: 30 35 20 15 17 5 9 6 12 19 30 20 1 2 3 4 5 6 7 8 9 10 11 12 实验总结与分析: 首先明确一个问题,两个矩阵相乘必须满足前一矩阵的列数等于后一矩阵的行数。动态规划的第一步是刻画最优解的结构,这里就用到了穷举搜索的方法。设法让所研究的问题的最优解包含其子问题的最优解,问题就容易解决。 动态规划问题中涉及两个重要的算法,穷举算法和递归算法 在矩阵连乘积最优计算次序问题中,当A1A2…An的最优完全加括号方式在Ak和Ak+1之间将矩阵链断开,由此确定的子链A1A2…Ak和Ak+1Ak+2…An的完全加括号方式也是最优的。

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档