算法设计与分析:递归与分治法-实验报告(共8页).doc

上传人:飞****2 文档编号:13903453 上传时间:2022-05-01 格式:DOC 页数:8 大小:85.50KB
返回 下载 相关 举报
算法设计与分析:递归与分治法-实验报告(共8页).doc_第1页
第1页 / 共8页
算法设计与分析:递归与分治法-实验报告(共8页).doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《算法设计与分析:递归与分治法-实验报告(共8页).doc》由会员分享,可在线阅读,更多相关《算法设计与分析:递归与分治法-实验报告(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上 应用数学 学院 信息安全 专业 班 学号 姓名 实验题目 递归与分治法 综合实验评分表指导教师评分标准序号评分项目评分标准满分打分1完成度按要求独立完成实验准备、程序调试、实验报告撰写。202实验内容(1) 完成功能需求分析、存储结构设计;(2) 程序功能完善、可正常运行;(3) 测试数据正确,分析正确,结论正确。303实验报告内容齐全,符合要求,文理通顺,排版美观。404总结对实验过程遇到的问题能初步独立分析,解决后能总结问题原因及解决方法,有心得体会。10实验报告一、 实验目的与要求1. 掌握递归算法的设计思想 2. 掌握分治法设计算法的一般过程 3. 理解并掌

2、握算法渐近时间复杂度的分析方法二、 实验内容1、折半查找的递归算法(1)源程序代码#include #include using namespace std;int bin_search(int key,int low, int high,int k) int mid; if(lowhigh) return -1; else mid = (low+high) / 2; if(keymid=k) return mid; if(kkeymid) return bin_search(key,mid+1,high,k); else return bin_search(key,low,mid-1,k);

3、 int main() int n , i , addr; int A10 = 2,3,5,7,8,10,12,15,19,21; cout 在下面的10个整数中进行查找 endl;for(i=0;i10;i+) cout Ai ; cout endl endl 请输入一个要查找的整数 n; addr = bin_search(A,0,9,n); if(-1 != addr) cout endl n 是上述整数中的第 addr 个数 endl;else cout endl n 不在上述的整数中 endl endl; getchar();return 0;(2)运行界面查找成功查找失败2、用分治

4、法求x的n次方,要求时间复杂度为O(lgn)(1)源程序代码#include #include using namespace std;int Pow(int x, int n) if (n = 1) return x; else if (n 1) int s; int m = n / 2; s = Pow (x, m); if (n % 2 = 0) return (s * s); else return (s * s * x); int main() int x, n; cout 你将进行x的n次方计算 endl endl;cout 请输入x: x;cout 请输入n: n; cout e

5、ndl 计算结果: Pow(x, n) endl endl; return 0;(2)运行界面3、自然合并排序算法(1)源程序代码#include StdAfx.h#include using namespace std;const int SIZE = 100;int arrSIZE;int recSIZE;void merge(int fir,int end,int mid);int pass(int n);void mergeSort(int n);void mergeSort(int n) int num=pass(n); while(num!=2) for(int i=0;inum;

6、i+=2) merge(reci,reci+2-1,reci+1-1); num=pass(n); void merge(int fir,int end,int mid) int tempArrSIZE; int fir1=fir,fir2=mid+1; for(int i=fir;imid) tempArri=arrfir2+; else if(fir2end) tempArri=arrfir1+; else if(arrfir1arrfir2) tempArri=arrfir2+; else tempArri=arrfir1+; for(int i=fir;i=end;i+) arri=t

7、empArri;int pass(int n) int num=0; int biger=arr0; recnum+=0; for(int i=1;i=biger)biger=arri; else recnum+=i; biger=arri; recnum+=n; return num;int main() int n;cout请输入需要排序的整数个数:n) for(int i=0;in;i+)cout请输入整数:arri; mergeSort(n); cout排序结果为:endl;for(int i=0;in;i+)coutarri ; coutendlendl; cout请输入需要排序的整

8、数个数:endl; return 0;(2)运行界面三、问题与讨论问题:分治法能解决的问题一般具有什么特征?解答:任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小越容易直接求解,解题所需的计算时间也越少。分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治法所能解决的问题一般具有以下几个特征: (1)该问题的规模缩小到一定的程度就可以容易地解决; (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质; (3)利用该问题分解出的子问题的解可以合并为该问题的解; (4)该问题所分解出的各个子问题是

9、相互独立的,即子问题之间不包含公共的子问题。四、总结这次实验的内容都很有代表性,通过上机操作实践与对问题的思考,让我更深层地领悟到了分治法的效率。分治法的基本思路并不难理解,就是将一个难以直接解决的大问题,分割成一些规模较小的相同问题,在计算机的处理当中,问题的规模越小就越容易直接求解,解题所需的计算时间也越少,所以分治法在合适的问题中是能大大提高效率的。我非常喜欢上机课,因为课上听的理论内容也许觉得懂了,但课后没有一些实践,于是对一些难点实际上掌握得并不好。刚看到课题的实验内容,其实基本思路和条理还是会有的,因为会有一定的知识基础,能够想到一些相关的解决思路,但有思路不一定就能够解决问题,真

10、正动手去做的时候才发现会出现更多的实际问题。解决遇到的问题就是我们学习的过程,同时也能让我注意到一些以前不曾在意的问题。像我是使用C+来写代码的,其中我这次实验时我就发现,“#include “StdAfx.h”一定要放在首行,不然就会出错;调试程序时如果出现“Cannot find or open the PDB file”的提示而导致程序不能正常运行时,按Ctrl+F5来直接执行就能正常运行了,因为这跟系统环境有关系;等等。每次的实践都能有一些发现,不管是大是小,积累多了就成了自己丰富的经验。所以我还是挺喜欢实验课的,能进行一些实用性很强的实践,更深层地领悟到书本的理论知识,同时还能享受把bug逐个解决的快感。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁