收藏 分享(赏)

分治与递归算法实验.doc

上传人:精品资料 文档编号:10661087 上传时间:2019-12-16 格式:DOC 页数:9 大小:76.21KB
下载 相关 举报
分治与递归算法实验.doc_第1页
第1页 / 共9页
分治与递归算法实验.doc_第2页
第2页 / 共9页
分治与递归算法实验.doc_第3页
第3页 / 共9页
分治与递归算法实验.doc_第4页
第4页 / 共9页
分治与递归算法实验.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、实验二 分治与递归算法的应用一、实验目的1掌握分治算法的基本思想(分-治-合) 、技巧和效率分析方法。2熟练掌握用递归设计分治算法的基本步骤(基准与递归方程) 。3学会利用分治算法解决实际问题。二、实验内容 1.问题描述:题目一:线性时间选择给定 n 个元素和一个整数 k,要求用 O(n)时间找出这 n 个元素中第 k 小元素。题目二:金块问题老板有一袋金块(共 n 块,n 是 2 的幂(n2) ),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。并对自己的程序进行复杂性分析。【输入输出样例】题目三:求最大两个数

2、和最小两个数利用分治法求一组数据中最大的两个数和最小的两个数。2.数据输入:个人设定,由键盘输入。3.要求:1)上述题目任选其二。上机前,完成程序代码的编写2)独立完成实验及实验报告三、实验步骤1.理解算法思想和问题要求;2.编程实现题目要求;3.上机输入和调试自己所编的程序;4.验证分析实验结果;5.整理出实验报告。一实验目的二问题描述三算法设计包含:数据结构与核心算法的设计描述、函数调用及主函数设计、主要算法流程图等1. 金块问题: 考虑到可能输入数据有一个或者两个这种情况,所以解决问题时分三种情况考虑,然后通过函数调用来实现寻找最大最小的数值。 复杂性分析:当 n 是 2 的幂时,即对于

3、某个正整数 k,n 等于 2 的 k 次方,可以证明,任何以元素比较为基础的找最大和最小元素的算法,其元素比较下界均为3n/2-2 次。因此,过程 maxmin 在这种意义上是最优的。T(n)=2T(n/2)+2Main 函数输入金块数量循环读入数据调用maxmin 函数2. 最大最小两个数:与金块问题类似,这是寻找最大最小的两个数。利用循环嵌套条件语句进行判断,选择出最大最小的两个数。四.程序调试及运行结果分析1) 有五个金块,其重量分别为 2.3,1.3 ,6.9, 2, 1 成功运行程序后输出最重和最轻的金块的重量。输出结果Main 函数输入相关数据调用_maxmin函数利用条件语句进行

4、判断返回 max min输出结果2) 如下图所示,输入六个数分别为:5,9,12,3,16,2 成功运行后,输出最大的 2 个元素 16,12 最小的 2 个元素 2,3。五.实验总结通过本次实验,我学会了如何运用分治法将整个问题分解成若干个小问题后分而治之,使其产生出方便求解的子问题,必要时逐步合并这些子问题的解,从而得到问题的解。在实验中我观察了相关算法结合老师上课讲解的,我觉得这类问题实际可以用一个递归方程来表示,通过递归逐步求解问题。同时,通过本次实验我也发现递归算法的重要性,自己对递归算法还不能熟练的应用。所以,在课下我会继续努力掌握这种算法,以便能在以后熟练的应用它。通过第三题明白

5、了眼过千变不如手动一遍,上课是听懂了.课下我又仔细的上网看了研究了一下,但是今天敲出来还是有一些问题,我觉得一些问题是值得注意的.附录:程序清单 (程序过长,可附主要部分)1) 金块问题程序如下:#includeusing namespace std;int i,n;float a100;void maxmin(int i,int j,float 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;elsefm

6、in=lmin;int main()coutn;coutai;float max,min;maxmin(1,n,max,min);coutusing 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(aimin) *min2=*min1; *min1=min; if(min!=minmin) if(*min2minmin) *min2=minmin; else if(*min2min) *min2=min; int main() int n,i,m,max2,min2; coutn; coutm; ai=m; _maxmin(0,n-1, cout“输入的数中最大的 2 个元素为:“max0“ “max1endl;cout“输入的数中最小的 2 个元素为:“min0“ “min1endl;return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报