算法设计与分析报告大作业.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案 精彩文档 算法分析与设计 大作业 班 级: 12信科 姓 名: 郭倩南 学 号: 1242155105 完成日期: 2015-6-4 指导教师: 陈 平 序号 选定题目 所用算法设计技术 1 数字三角形问题 动态规划 2 集合划分问题 分治法 3 求子集问题 回溯法 评分: 大作业报告 1、数字三角形问题 一、问题描述 对于给定的由n行数字组成的数字三角形,计算从三角形的底至顶的路径经过的数字和的最大值。如:7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 二、实验内容与实验步骤 实验内容: 输入数据的第1 行是数字三角形的行数n,1=n=100。接下来n行是数字三角形各行中的数字。所有数字在0..99之间 实验步骤: 首先证明该问题满足最优化原理 最优化原理:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。 建立动态规划函数 填表 三、实验环境 Window7系统,vc++6.0软件 问题分析 由观察数字三角形可知,从数字三角形的顶层出发,下一层选择向左还是向右取决于两个4层数字三角形的最大数字和,而对于第四层的决定取决于第三层的最大数字和,依次类推,可知该问题是多阶段决策最优化问题,并且划分出来的子问题是相互重叠的,所以该问题采用动态规划法解决 动态规划:与分治法相似,把问题分解按层次分成子问题,直到可以直接求解的子问题,然后一级一级地向上求解。 与分治法的出别在于:动态规划适用有许多重复子问题出现的问题,它保留已求出问题的解。 7 3 8 3 8 8 1 0 8 1 1 0 2 7 4 4 2 7 4 7 4 4 4 5 2 6 5 4 5 2 6 5 2 6 5 一个五层数字三角形 子问题(1) 子问题(2) 问题解决 (1)根据对问题的分析,写出解决办法。 1、证明:S,S1,S2,..Sn,t是从S到t的一条数字和最大的路径,从源点S开始,设从S到下一段的顶点S1已经求出,则问题转化为求从S1到t的数字和最大的路径,显然S1,S2,...Sn,t一定构成一条从S1到t的数字和最大值的路径,如若不然,设S1,r1,r2,....rq,t是一条数字和最大的路径,则S,S1,r1,r2,....rq,t的路径经过数字和的最大值比S,S1,S2,...Sn,t的路径数字和更大,从而导致矛盾,所以数字三角形问题满足最优性原理。 2、动态规划函数: a[i][j]+=a[i+1][j] 当 a[i+1][j]a[i+1][j+1] 时 a[i][j]+=a[i+1][j+1] 当a[i+1][j]=a[i+1][j+1] 时 填表 第一行 7+23=30 第二行 3+20=23 8+13=21 第三行 8+12=20 1+12=13 0+10=10 第四行 2+5=9 7+5=12 4+6=10 4+6=10 初始化 4 5 2 6 5 你在调试过程中发现了怎样的问题?又做了怎样的改进? 答:(a)在代码编译成功后,显示屏上无任何提示语,让人有点不知所措,感觉设计的不太人性化,于是在代码中又添加了一些提示语句,使其更容易理解和操作 (b)算法设计比较简单,运行结果没有显示路径,所以还有待研究 描述你在进行实现时,主要的函数或操作内部的主要算法;分析这个算法的时、空复杂度 答:主要算法: int func() { int i,j; for(i=n-1;i=1;i--) for(j=1;j=i;j++) { if(a[i+1][j]a[i+1][j+1]) a[i][j]+=a[i+1][j]; else a[i][

文档评论(0)

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

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

1亿VIP精品文档

相关文档