深圳大学 计算机导论raptor实验.docx
《深圳大学 计算机导论raptor实验.docx》由会员分享,可在线阅读,更多相关《深圳大学 计算机导论raptor实验.docx(17页珍藏版)》请在冰豆网上搜索。
深圳大学计算机导论raptor实验
深圳大学实验报告
课程名称:
计算机导论实验
实验项目名称:
算法设计工具的使用
学院:
计算机与软件学院
专业:
指导教师:
报告人:
学号:
班级:
实验时间:
2016.10.20
实验报告提交时间:
2016.11.22
教务处制
实验目的
1.了解穷举法、回溯法、递归算法的求解问题的计算步骤;
2.学会使用raptor简单编程,如百钱百鸡问题、八皇后问题、Fibonacci数列和汉诺塔问题。
实验环境
硬件环境:
PC
软件环境:
Windows7中文版,Raptor。
实验步骤:
一、Raptor的下载安装与简单操作
1.下载软件:
在浏览器中输入下面的网址,回车后进入raptor的官网。
然后点击“Downloadlatestversion”,下载最新的版本进行安装。
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=100
Raptor流程图如右图。
2.八皇后问题(用回溯法解决)
八皇后问题是一个以国际象棋为背景的问题:
如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?
为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。
八皇后问题可以推广为更一般的n皇后摆放问题:
这时棋盘的大小变为n×n,而皇后个数也变成n。
而且仅当n=1或n≥4时问题有解。
3.Fibonacci数列(用递归解决)
斐波那契数列(Fibonaccisequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:
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.基本算法光看定义有些难理解,但结合相关的简单问题一起理解,则更加容易。
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注: