版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、*大学*学院计算机思维与算法分析课程论文计算机思维与算法之美学 部 * 班 级 * 专 业 计算机科学与技术 学 号 * 姓 名 * 计算机思维与算法之美摘要:本文通过参考相关文献,对递归算法和动态规划进行了较为全面的分析与解释,并且通过举一个实例进行代码实现演示,具体分析递归算法与动态规划分析,从中了解递归算法和动态规划问题。关键字:计算机思维,递归算法,动态规划分析,算法设计Abstract: In this paper, by reference to relevant literature, the recursive algorithm and dynamic programming
2、 are discussed in the comprehensive analysis and interpretation, and through code implements demonstration cite an example, detailed analysis of recursive algorithm and dynamic programming analysis, learn about recursive algorithm and dynamic programming problem.算法设计与分析是数据结构的有力补充,从中可以了解到算法设计的奥妙以及对数据
3、结构中的数据存储结构更深层次的运用。计算机算法设计与分析是面向设计的、处于核心地位的一门学科。算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。算法设计是一件非常困难的工作,常用的算法设计方法有:分治法、贪心方法、动态规划、回溯法等。一、递归算法分析1.1递归算法简介与特点递归就是在函数或子过程的内部,直接或间接地调用自己的算法;递归算法是从下往上进行思维,需要对问题有全局的了解;在使用递归算法时,必须至少测试一个可以终止递归的条件,并且还必须对在合理的递归调用次数内未满足此类条件的情况进行处理,如果没有一个在正常情况下可以满足的条件,则过程将陷入执行无限循环的高度危险之中;递归
4、算法的描述非常简洁而易于理解,但因重复计算和较大的堆栈消耗使递归算法的解题的运行效率较低;并不是所有的语言都支持递归,在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等不利编程的因素,所以一般不提倡用递归算法设计程序。1.2递归过程递归过程是直接调用自己或通过一系列的过程调用语句间接调用自己的过程。在一个过程的运行期间调用另一个过程时,在执行被调用过程之前,系统要先把所有的实在参数返回地址等信息传递给被调用的过程保存,为被调用过程的局部变量分配存储空间,将控制转移到被调用入口。接下来从被调过程返回调用过程要保存被调用过程的计算结果,释放被调用过程的数
5、据区,依照被调过程保存的返回地址将控制转移到调用过程。该过程服从后调用先返回的原则。1.3递归算法的优缺点递归算法易于理解,结构清晰,所编写的代码简洁精练,可读性好,有利于代码的维护。然而递归算法的效率却较低,占用较大的内存开销,消耗更多的系统堆栈,算法的空间复杂度大,故可以实现的深度是有限制的。而且要考虑函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法。1.4递归算法的适用范围由于递归算法的运行效率较低,堆栈容易溢出的特点,递归算法适用于问题规模较小且那些不存在简明的数学模型以阐明问题的本质,或者存在数学模型,但是难于实现的问题
6、,这样可以减少代码的复杂度。递归算法所适用的问题一般有这样的特征:为求解规模为N的问题,设法先将它分解为规模较小的子问题,然后从这些子问题的解构造出整个问题的解,并且这些子问题也能采用同样的分解和综合方法,分解成规模更小的子问题,并从这些更小的子问题的解构造出较大规模的问题的解,特别地,当规模N=1时,能直接得解。例如很多的数学函数是递归定义的(阶乘函数)、有的数据结构(广义表,二叉树)还有一类本身没有明显的递归结构但用递归求解更为简单的问题(汉诺塔问题,八皇后问题)。1.5递归与递推的关系递推法是求解递归方程的基本方法,对于某些递归关系可由逐级递推求得递归方程的解。递归算法会引起一系列的函数
7、调用,并且可能会有一系列的重复计算,所以当某个递归算法能较方便地转化成递推算法时,通常按递推算法编写程序。递归算法的执行过程分递推与回归两个阶段。在递推阶段,把较复杂的问题(规模为N)的求解推到比原问题简单一些的问题(规模小于N)的求解。在回归阶段,当获得最简单的情况后,逐级返回,依次获得稍复杂问题的解。递推是利用问题本身所具有的递推关系对问题求解的一种方法。采用递推法建立起来的算法一般要有重要的递推性质,即当求得问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,i-1的一系列的解,构造出问题规模为i的解。若设这种问题的规模为N,当N=0或N=1时,解或为已知,或能很容易地求
8、得。1.6用递归算法来解决“骨头的诱惑”问题1.6.1问题描述一只小狗在一个古老的迷宫里找到一根骨头,当它叼起骨头时,迷宫开始颤抖,它感觉到地面开始下沉。它才明白骨头是一个陷阱,它拼命地试着逃出迷宫。迷宫是一个NM大小的长方形,迷宫有一个门。刚开始门是关着的,并且这个门会在第T秒钟开启,门只会开启很短的时间(少于一秒),因此小狗必须恰好在第T秒达到门的位置。每秒钟,它可以向上、下、左或右移动一步到相邻的方格中。但一旦它移动到相邻的方格,这个方格开始下沉,而且会在下一秒消失。所以,它不能在一个方格中停留超过一秒,也不能回到经过的方格。小狗能成功逃离吗?1.6.2问题分析小狗要在迷宫中到处搜寻可以
9、逃离道路,如果找到则成功逃离,如果找不到则会被困住。此骨头的诱惑问题可以用典型的递归与回溯方法进行求解。对问题进行建模并用非形式化语言描述如下: 递归搜索阶段:给定小狗当前位置,按照一定的顺序对下一步的走向进行深度递归搜索,算法需要保存现场。 回溯恢复阶段:当某条路径的终点并不是出口时,算法需要回退,这就恢复现场,一边从另一个方向进行搜索。 结束条件:当搜索了所有的路径,让没有找到出口,则结束算法,此结果代表没有出路;当找到一个出口,同样结束算法,此结果代表找到出路,递归路径即为小狗逃离路径。1.6.3程序设计C语言实现的主要代码如下:二、动态规划分析2.1动态规划简介与特点动态规划(dyna
10、micprogramming)是运筹学的一个分支,是求解决策过程(decisionprocess)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistepdecisionprocess)的优化问题时,提出了著名的最优化原理(principleofoptimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法动态规划。动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不象搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往
11、往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。2.2动态规划基本思想动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得
12、到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。2.3适合动态规划解决的问题 具有最优子结构性,即原问题的最优解包含子问题的最优解。 子问题重叠性,也就是说子问题之间不是独立的,一个子问题在下一阶段决策中可能被多次使用到。对有分解过程的子
13、问题还表现在:自顶向下分解问题时,每次产生的子问题并不总是新问题,有些子问题会反复出现多次。2.4算法设计步骤 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。2.5用动态规划来解决“0/1背包”问题2.5.1问题描述给定n种物品和1个背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何装入背包中的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包、不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。该问题称为0/1背包问题。2.5.2问题分
14、析令V(i,j)表示在前i(1=i=n)个物品中能够装入容量为就j(1=j=C)的背包中的物品的最大价值,则可以得到如下的动态规划函数:(1)V(i,0)=V(0,j)=0(2)V(i,j)=V(i-1,j)jwi(1)式表明:如果第i个物品的重量大于背包的容量,则装人前i个物品得到的最大价值和装入前i-1个物品得到的最大价是相同的,即物品i不能装入背包;(2)式表明:如果第i个物品的重量小于背包的容量,则会有一下两种情况:(a)如果把第i个物品装入背包,则背包物品的价值等于第i-1个物品装入容量位j-wi的背包中的价值加上第i个物品的价值vi;(b)如果第i个物品没有装入背包,则背包中物品价值就等于把前i-1个物品装入容量为j的背包中所取得的价值。显然,取二者中价值最大的作为把前i个物品装入容量为j的背包中的最优解。2.5.3程序设计C语言实现的主要代码如下:三、总结递归和动态规
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州黔西南州水资源开发投资(集团)有限公司招聘3人历年真题库带答案解析
- 广州农商银行2026届校园招聘备考题库附答案
- 2025江苏宿迁宿城区人民医院招聘事业编制工作人员57人参考题库附答案解析
- 2025年湖南工商大学第二次公开招聘21人历年真题库带答案解析
- 2025贵州遵义市正安县面向“三支一扶”计划期满人员专项招聘乡镇事业单位人员招聘3人备考题库附答案解析
- 2025年永吉县总工会公开招聘工会社会工作者(6人)备考公基题库带答案解析
- 大通县2025年面向社会公开招聘森林草原专职消防员笔试模拟试卷附答案解析
- 2026泰安银行股份有限公司校园招聘70人历年真题汇编带答案解析
- 2025山东滨州博兴县招聘戏曲表演专业技术人员2人笔试模拟试卷附答案解析
- 2025福建厦门市集美职业技术学校非在编教师招聘1人历年真题汇编附答案解析
- 小学生日常行为规范、小学生守则知识竞赛试题
- 2025年及未来5年中国机电安装工程市场竞争态势及行业投资潜力预测报告
- 2025年及未来5年中国过硼酸钠行业发展监测及投资战略规划研究报告
- 道路运输企业档案管理制度
- 术中输血安全管理
- 黑龙江省哈尔滨市九中2025-2026学年高一上学期期中语文试题(含答案及解析)
- 2025年学法考试广东考场一试题及答案本
- 铁路养护资质管理办法
- T-HAS 141-2024 合成超硬材料用叶蜡石
- 六年级上册科学实验报告单
- 电费分割单模板
评论
0/150
提交评论