欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOCX文档下载
 

线性时间选择实验报告

  • 资源ID:139859119       资源大小:50.79KB        全文页数:4页
  • 资源格式: DOCX        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

线性时间选择实验报告

线性时间选择一. 实验目的:1. 理解算法设计的基本步骤和各步的主要内容、基本要求;2. 加深对递归设计方法基本思想的理解,并利用其解决现实生活中的问题;3. 通过本次试验初步掌握将算法转化为计算机上机程序的方法。二. 实验内容:1. 编写实现算法:给定n个元素,在这n个元素中找到第key小的元素;2. 将输入的数据存储到指定的文本文件中,而输出数据存放到另一个文本文件中,包 括结果和具体的运行时间;3. 对实验结果进行分析。三. 实验操作:1. 线性时间选择的思想:首先将这n个元素分成5组,利用排序算法找到其中的中位数,再将这些中位数 排序找到整个数组的中位数median,以这个中位数median为界限,将整个数组划分 为三部分,小于median,等于median和大于median三部分,判断key在哪部分中, 对那部分进行递归调用,直到找到等于key的元素为止。综上判断,其时间复杂度为:T(n)<=cn (n为实验数据的个数),故为线性时间。2. 快速排序:本次排序使用的是快速排序,快速排序是一种相对较快的排序方式,能够减少一 定的时间开销。代码实现:void quickSort(int List,int low,int high)(if(low>=high) return;int first=low;int last=high;int key=Listfirst;while(first<last)(while(first<last&&Listlast>=key) -last;Listfirst=Listlast;while(first<last&&Listfirst<=key) +first;Listlast=Listfirst;Listfirst=key;quickSort(List,low,first-1);quickSort(List,last+1,high);3. 实验数据的输入:为了保证实验数据的随机性,本实验采用随机生成的方式提供数据,并将输入 输出数据存储到指定的文本文件中,需要采用C+文件流操作,对于数据的输入, 由于cin对数据的读取会忽略空格和换行操作,故使用cin流来控制数据的输入。输入代码实现:int write()(ofstream outFile;outFile.open("E:/程序设计/practice 1/算法设计与分析/文本文件夹/线性选择数据.txt”,ios:trunc);if(!outFile.is_open() cout<<"outFile can't open!"<<endl;cout<<"输入随机数的范围:<<endl;int length,len,start,end,j=0;cin>>start>>end;cout<<"输入要查找的数据个数:"<<endl;cin>>length;len=length;int* Array=new intlength;for(int i=0;i<length;i+)Arrayi=rand()%(end-start)+start;if(i=0) continue;for(;j<i;j+)(while(Arrayi=Arrayj)(Arrayi=rand()%(end-start)+start;j=0;j=0;for(int i=0;i<length;i+) outFile<<Arrayi<<""outFile.close();return length;输出代码实现:int* read(int length)(ifstream inFile;inFile.open("E:/程序设计/practice 1/算法设计与分析/文本文件 夹/线性选择数据.txt");if(!inFile.is_open() cout<<"inFile can't open!"<<endl;int* Array=new intlength;int i=0;while(!inFile.eof()&&i<length) inFile>>Arrayi+;return Array;inFile.close();4.查找中位数:首先将所有的数据分成五组,找到每组中的中位数,再从找到的中位数中找到整个 数组的中位数median,利用median将所有的数分成3份,小于median、等于median和大 于median三部分,判断所要找的元素在哪部分中,再将哪部分数据作为整体执行上述操 作,直到数组不能再分为止。代码实现:int grouping(int Array,int length,int key)( int i=0,start=0,group,m=0,n=0;group=length/5;if(group=0)(quickSort(Array,0,length-1);return Arraykey-1;else(int* List=new intgroup;int* Array1=new intlength;int Array21;int* Array3=new intlength;while(group)(quickSort(Array,start,start+4);Listi=Arraystart+2;i+;start+=5;group-;quickSort(List,0,i-1);for(int j=0;j<length;j+)(if(Arrayj<Listi/2) Array1m+=Arrayj;if(Arrayj>Listi/2) Array3n+=Arrayj;if(Arrayj=Listi/2) Array20=Arrayj;if(m+1>=key) return grouping(Array1,m,key);else return grouping(Array3,n,key-m-1);四.实验数据分析:本次实验采用随机数生成的算法提供数据,故可以提供大量的数据,下面是多次实 验数据的汇总。其中该时间是在查询第500个数据时统计的时间。苗制时行运数据查询时间图表5 15 0 L 0五.实验感受:在实验的测试中,当实验的数据偏大时,会出现溢出的现象,需要对代码中的数组 大小进行扩展,而且会出现程序卡住的现象,需要等待时间。

注意事项

本文(线性时间选择实验报告)为本站会员(d****)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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