好文档 - 专业文书写作范文服务资料分享网站

算法设计与分析实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

本科实验报告

课程名称: 算法设计与分析

实验项目: 递归与分治算法

实验地点: 计算机系实验楼110

专业班级: 物联网1601 学号: 2016002105

学生姓名: 俞梦真

指导教师: 郝晓丽

2018年 05月 04 日

实验一 递归与分治算法

1.1 实验目的与要求

1.进一步熟悉C/C++语言的集成开发环境;

2.通过本实验加深对递归与分治策略的理解和运用。

1.2 实验课时

2学时

1.3 实验原理

分治(Divide-and-Conquer)的思想:一个规模为n的复杂问题的求解,可以划分成若干个规模小于n的子问题,再将子问题的解合并成原问题的解。

需要注意的是,分治法使用递归的思想。划分后的每一个子问题与原问题的性质相同,可用相同的求解方法。最后,当子问题规模足够小时,可以直接求解,然后逆求原问题的解。

1.4 实验题目

1.上机题目:格雷码构造问题

Gray码是一个长度为2n的序列。序列无相同元素,每个元素都是长度为n的串,相邻元素恰好只有一位不同。试设计一个算法对任意n构造相应的Gray码(分治、减治、变治皆可)。

对于给定的正整数n,格雷码为满足如下条件的一个编码序列。 (1)序列由2n个编码组成,每个编码都是长度为n的二进制位串。 (2)序列中无相同的编码。

(3)序列中位置相邻的两个编码恰有一位不同。 2.设计思想:

根据格雷码的性质,找到他的规律,可发现,1位是0 1。两位是00 01 11 10。三位是000 001 011 010 110 111 101 100。n位是前n-1位的2倍个。N-1个位前面加0,N-2为倒转再前面再加1。

3.代码设计:

#include #include #include #include using namespace std; //求格雷码 递推式子:G(n-1)=B(n-1) G(i)=B(i+1)异或B(i) (0 My_grad; void get_grad(int n) { //cout<<1<1) { //cout<<1< tmp; for(int j=0;j=0;j--) { string s=\ s+=tmp[j]; My_grad.push_back(s); } } } } int main() { int n; while(cin>>n) { get_grad(n); for(int i=0;i

运行结果:

1.5 思考题

(1)递归的关键问题在哪里?

答:

1.递归式,就是如何将原问题划分成子问题。

2.递归出口,递归终止的条件,即最小子问题的求解,可以允许多个出口。

3.界函数,问题规模变化的函数,它保证递归的规模向出口条件靠拢(2)递归与非递归之间如何实现程序的转换?

(3)分析二分查找和快速排序中使用的分治思想。 答:

1.一般根据是否需要回朔可以把递归分成简单递归和复杂递归,简单递归一般就是根据递归式来找出递推公式(这也就引申出分治思想和动态规划)。

2.复杂递归一般就是模拟系统处理递归的机制,使用栈或队列等数据结构保存回朔点来求解。

(4)分析二次取中法和锦标赛算法中的分治思想。

二次取中法:使用快速排序法中所采用的分划方法,以主元为基准,将一个表划分为左右两个子表,左子表中的元素均小于主元,右子表中的元素均大于主元。主元的选择是将表划分为r部分,对找出r个中的 中间值,并求r组的中间值中的中间值。

锦标赛算法:

两两分组比较,大者进入下一轮,知道剩下1个元素max为止。在每次比较中淘汰较小元素,将被淘汰元素记录在淘汰它的元素的链表上。检查max的链表,从中知道最大元素,即second

算法设计与分析实验报告

本科实验报告课程名称:算法设计与分析实验项目:递归与分治算法实验地点:计算机系实验楼110专业班级:物联网1601学号:2016002105
推荐度:
点击下载文档文档为doc格式
053fo3okc779c964hjsm5kaxd91bwp00kvp
领取福利

微信扫码领取福利

微信扫码分享