




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 分治与递归算法的应用 一、实验目的1掌握分治算法的基本思想(分-治-合)、技巧和效率分析方法。2熟练掌握用递归设计分治算法的基本步骤(基准与递归方程)。3学会利用分治算法解决实际问题。二、实验内容 1.问题描述:题目一:线性时间选择给定n个元素和一个整数k,要求用O(n)时间找出这n个元素中第k小元素。题目二:金块问题老板有一袋金块(共n块,n是2的幂(n2),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。并对自己的程序进行复杂性分析。【输入输出样例】题目三:求最大两个数和最小两个数利用分治法求一组数据中最大的两个数和最小的两个数。2.数据输入:个人设定,由键盘输入。3.要求:1)上述题目任选其二。上机前,完成程序代码的编写2)独立完成实验及实验报告三、实验步骤1.理解算法思想和问题要求;2.编程实现题目要求;3.上机输入和调试自己所编的程序;4.验证分析实验结果;5.整理出实验报告。一实验目的二问题描述三算法设计包含:数据结构与核心算法的设计描述、函数调用及主函数设计、主要算法流程图等1. 金块问题: 考虑到可能输入数据有一个或者两个这种情况,所以解决问题时分三种情况考虑,然后通过函数调用来实现寻找最大最小的数值。 复杂性分析:当n是2的幂时,即对于某个正整数k,n等于2的k次方,可以证明,任何以元素比较为基础的找最大和最小元素的算法,其元素比较下界均为3n/2-2次。因此,过程maxmin在这种意义上是最优的。T(n)=2T(n/2)+2Main函数循环读入数据输入金块数量调用maxmin函数输出结果2. 最大最小两个数:与金块问题类似,这是寻找最大最小的两个数。利用循环嵌套条件语句进行判断,选择出最大最小的两个数。Main函数输入相关数据调用_maxmin函数利用条件语句进行判断返回max min输出结果四.程序调试及运行结果分析1) 有五个金块,其重量分别为2.3,1.3 ,6.9, 2, 1成功运行程序后输出最重和最轻的金块的重量。2) 如下图所示,输入六个数分别为:5,9,12,3,16,2 成功运行后,输出最大的2个元素16,12最小的2个元素2,3。五.实验总结通过本次实验,我学会了如何运用分治法将整个问题分解成若干个小问题后分而治之,使其产生出方便求解的子问题,必要时逐步合并这些子问题的解,从而得到问题的解。在实验中我观察了相关算法结合老师上课讲解的,我觉得这类问题实际可以用一个递归方程来表示,通过递归逐步求解问题。同时,通过本次实验我也发现递归算法的重要性,自己对递归算法还不能熟练的应用。所以,在课下我会继续努力掌握这种算法,以便能在以后熟练的应用它。通过第三题明白了眼过千变不如手动一遍,上课是听懂了.课下我又仔细的上网看了研究了一下,但是今天敲出来还是有一些问题,我觉得一些问题是值得注意的.附录:程序清单 (程序过长,可附主要部分)1) 金块问题程序如下:#includeusing namespace std;int i,n;float a100;void maxmin(int i,int j,float &fmax,float &fmin) int mid;float lmax,lmin,rmax,rmin;if(i=j)fmax=ai;fmin=ai;else if(i=j-1)if(airmax)fmax=lmax;elsefmax=rmax;if(lminrmin)fmin=rmin;elsefmin=lmin;int main()cout请输入金块的数量:n;cout请输入n块金子的重量endl;for(i=1;iai;float max,min;maxmin(1,n,max,min);cout最重金块是max 最轻金块是minendl;return 0;2) 求最大两个数和最小两个数#includeusing namespace std; int a100; void _maxmin(int i,int j,int *max1,int *min1,int *max2,int *min2) int max,min,minmax,minmin; if(i=j) *max1=*min1=*min2=*max2=ai; else if(i=j-1) if(aiaj) *max1=*min2=aj;*min1=*max2=ai; else *max1=*min2=ai;*min1=*max2=aj; else int m=(i+j)/2; _maxmin(i,m,max1,min1,max2,min2);_maxmin(m+1,j,&max,&min,&minmax,&minmin);if(*max1max) *max2=*max1;*max1=max;if(max!=minmax) if(*max2minmax) *max2=minmax; else if(*max2min) *min2=*min1; *min1=min; if(min!=minmin) if(*min2minmin) *min2=minmin; else if(*min2min) *min2=min; int main() int n,i,m,max2,min2; cout你要输入几个数?n; cout请分别输入:endl;for(i=0;im; ai=m; _maxmin(0,n-1,&max0,&min0,&max1,&min1); cout
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 买门市股合同样本
- 农村地皮买卖合同样本
- 养殖专业租房合同样本
- 制作合同样本重
- 内贸租船合同标准文本
- 个人简易担保合同样本
- 个人相互担保合同样本
- 专业企业旅游租车合同标准文本
- 以房屋出售合同样本
- 农行银行贷款合同样本
- 干粉灭火器点检记录表(样表)
- 伍光和自然地理学4版知识点总结课后答案
- 《药疹(Drug Eruption)》PPT课件
- 手压式手电筒设计(棘轮机构及电路设计)
- 滇10J6-1住宅厨房、卫生间烟气道及管道井构造图集
- 华中科技大学版五年级信息技术教案
- 600MW超临界锅炉给水控制系统分析
- 固定收益研究报告透过x系统看银行间交易未来发展
- 上海实验学校幼升小测试题(共49页)
- PHC管桩-桩基工程监理质量评估报告
- 上海实验学校幼升小测试题
评论
0/150
提交评论