深圳大学-计算机导论--raptor实验.docx
15页深 圳 大 学 实 验 报 告 课程名称: 计算机导论实验 实验工程名称: 算法设计工具的使用 学院: 计算机与软件学院 专业: 指导教师: 报告人: 学号: 班级: 实验时间: 2022.10.20 实验报告提交时间: 201 教务处制实验目的1. 了解穷举法、回溯法、递归算法的求解问题的计算步骤;2.学会使用raptor简单编程,如百钱百鸡问题、八皇后问题、Fibonacci数列和汉诺塔问题。
实验环境硬件环境:PC软件环境:Windows7中文版,Raptor实验步骤:一、 Raptor的下载安装与简单操作 1.下载软件:在浏览器中输入下面的网址,回车后进入raptor的官网然后点击“Download latest version〞,下载最新的版本进行安装2. 软件的根本介绍A. Raptor有两个窗口:程序设计窗口和主控制台窗口各个图形的作用B.常量:Raptor定义了四个常量a) Pi〔圆周率〕=3.1415;b) e〔自然对数的底〕=2.7183;c) true/yes〔布尔值:真〕=1;d) false/no〔布尔值:假〕=0; 3.根本操作 A.赋值赋值窗口 B.输入/输出输入提示的窗格输入变量输出和输入类似C.选择/循环选择条件循环和选择类似,填循环条件4.常见错误:二、根本算法 算法〔Algorithm〕是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制也就是说,能够对一定标准的输入,在有限时间内获得所要求的输出不同的算法可能用不同的时间、空间或效率来完成同样的任务一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
接下来介绍穷举、回溯、递归三种算法1. 穷举法穷举法也称为枚举法,它的根本思想是根据题目的局部条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕假设某个情况验证符合题目的全部条件,那么为本问题的一个解;假设全部情况验证后都不符合题目的全部条件,那么此题无解穷举法用时间上的牺牲换来了全面保证性穷举法的根本思路: 确定穷举对象,对象所应该满足的约束条件和确定对象是否满足解的判定条件 一一穷举每一种可能的解,验证是否满足问题的解用穷举法解题时,就是按照某种方式列举问题答案的过程针对问题的数据类型而言,常用的列举方法一有如下三种:〔1〕顺序列举:是指 答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举〔2〕排列列举:有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举〔3〕组合列举:当答案的数据形式为一些元素的组合时,往往需要用组合列举组合是无序的2. 回溯法回溯法是一种选优搜索法,又称为试探法,按选优条件向前搜索,以到达目标但探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点〞.根本思想在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。
当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,那么逐层向其祖先结点回溯〔其实回溯法就是对隐式图的深度优先搜索算法〕 假设用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束 而假设使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束用回溯法解题的一般步骤:〔1〕针对所给问题,定义问题的解空间;〔2〕确定易于搜索的解空间结构;〔3〕以深度优先方式搜索解空间,并在搜索过程中用剪枝函数防止无效搜索3. 递归程序调用自身的编程技巧称为递归递归,就是在运行的过程中调用自己递归 做 为一种算法在程序设计语言中广泛应用 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的屡次重复计算递归的能力在于用有限的语句来定义对象的无限集合一般来说,递归需要有边界条件、递归前进段和递归返回段当边界条件不满足时,递归前进;当边界条件满足时,递归返回构成递归需具备的条件: 1. 子问题须与原始问题为同样的事,且更为简单;2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
三、 Raptor编程1. 百钱百鸡问题 〔用穷举法解决〕问题:今有鸡翁一,值钱伍;鸡母一 ,值钱三;鸡鶵三,值钱一 凡百钱买鸡百只,问鸡翁、母、鶵各几何?百钱百鸡实际上是一个求不定方程整数解的问题解法如下:设公鸡、母鸡、小鸡分别为x、y、z 只,:①……x +y+ z =100②……5x+3y+(1/3)z =100Raptor流程图如右图2. 八皇后问题〔 用回溯法解决〕八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了到达此目的,任两个皇后都不能处于同一条横行、纵行或斜线上八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n × n,而皇后个数也变成n而且仅当 n = 1 或 n ≥ 4 时问题有解3.Fibonacci数列〔用递归解决〕斐波那契数列〔Fibonacci sequence〕,又称黄金分割数列、因数学家列昂纳多·斐波那契〔Leonardoda Fibonacci〕以 兔子繁殖为例子而引入,故又称为“兔子数列〞,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F〔0〕=0,F〔1〕=1,F〔n〕=F(n-1)+F(n-2)〔n≥2,n∈N*〕。
fab (1) =1; fab (2) =1; fab (n) =fab(n-1) + fab(n-2) (n>2).4.汉诺塔问题 〔用地递归法解决〕思路:〔1〕把A柱上面的N-1个盘子移动到B柱;〔2〕把A柱上剩余的一个盘子移动到C柱;〔3〕把B柱上面的N-1个盘子移动到C柱实验小结:〔实验中出现问题的解决方法,实验心得体会等〕1.熟练掌握一个软件绝非易事,本次试验只是了解了一些关于raptor的根底,假设要熟练掌握,还需多加练习 2.在实验中有些不懂的地方,可以去图书馆查阅资料,或在网上求助,根本上能解决问题 3.根本算法光看定义有些难理解,但结合相关的简单问题一起理解,那么更加容易指导教师批阅意见:成绩评定: 指导教师签字: 年 月 日备注:。





