算法课程设计.docVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法课程设计

题目一 数塔问题 问题描述: 有如右图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大 解决问题所用的方法:动态规划 为了求得数塔1的解。我们将数塔1分解为如下的数塔1顶点、数塔2和数塔3 数塔1的解=数塔1的顶点+数塔2解与数塔3解的最大值,同理,我们也将数塔2和数塔3分解为更小的数塔4、数塔5、数塔6和数塔7 …… ……… 当数塔不可再分(仅有一层)时,就是分治的最小单元。 现运用动态规划的思想,自底向上求解,并将中间果存储想来以便以后再用。 A(1……n,1……n)表示数塔各层数的数字 B(1……n,1,……n)用来存储中间结果 基于分治的方法,得到递推公式如下: 注:i=1……n , j=1……i 自底向上求解该问题. 算法描述: 算法名称:MAXVALUE 输入:树塔的层数n和各层的数字A[n][n] 输出:最大值和路径C[n] 算法实现细节(可以用流程图,伪代码): for i ← 1 to n B[n,i] ← A[n,i] comment : 最下面一层为A[n,j] end for for i ← n-1 to 1 for j ← 1 to i+1 B[i,j] ← max{B[i+1,j],B[i+1,j+1]}+A[i,j] comment: B[i,j]等于下面它下面两个数的最大值加上A[i,j] end for end for k ← 1 C[1] ← 1 for i ← 2 to n if B[i,k+1] B[i,k] then k ← k+1 comment:寻找路径,找它下面两个数中最大一个的下标并记录 end if C[i] ← k end for return B[1,1] comment:返回最大路径的值 算法的时间复杂度 算法实例: 数据的输入(可以有屏幕截图) 数据的输出(可以有屏幕截图) 题目二 校园导航问题 问题描述: 设计你所在学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。 解决问题所用的方法:贪心算法 校园导航问题为最短路径问题。设G=(V,E)是一个每条边有非负长度的无向图,有一点s称为源点,校园导航问题就是要确定从s到V中的一个顶点x的的最短距离。 初始时,将顶点集合分为两个集合B={s},C={1……s-1,s+1……n},每一步中,我们选定源点到它的距离已经得到的一个顶点cC,并将它移入B中。与C中的每个顶点c联系的是标记D[c],它是只经过B中顶点的最短路径,一旦顶点cC移到B中,与c相邻的每个顶点 C的标记就会被更新。这表示找到了经过c到的更短路径。当x C被移入B中时,x的标记就是从源s到顶点x的最短路径。 为了方便找出具体的的最短图径,我们将标记矩阵定义为二维矩阵D,第x列的最小值就是源s到顶点x的最小路径。A(1……n,1……n)为无向图的邻接矩阵,我们寻找顶点s到s的最短路径无意义,我们将它到本身的距离定义为无穷大(只是为了方便)如下图: 寻找最短路径时,我们选找顶点x列的最小值的行标i,若i不等于s,则再找第i列的最小值所在的行标j,依次下去,直到行标为s时,这条路径就是最短路径。 算法描述: 算法名称:FINDMIN 输入:地点的个数n之间的距离A[i,j],以及起始点a和终点b 输出:最短路径值和其路径 算法实现细节(可以用流程图,伪代码): for i ←1 to n C[i] ← 0 comment:初始化路径 end for for i ← 1 to n B[i] ← 1 comment:B[i]记录地点i是否可用 end for for j ← 1 to n D[i,j] ← end for k ← a min ← 0 while k ≠ b for i ←1 to n if A[k,i] ≠ then D[k,j] ← A[k,j]+min comment: 如果A[k,j]不为无穷,则D[k,j]等于A[k,j]加上最小值 end if min ←

文档评论(0)

ma33756 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档