- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学号 0121010680514 实验成绩
武汉理工大学
实验报告
实验课程名称: 算法分析与设计
开课学院: 计算机科学与技术学院
指导老师姓名: 何九洲
学生姓名: 桂江亨
学生专业班级: 软件工程Sy1001班
2012 – 2013 学年 第 一 学期
实验课程名称: 分治法写一个二分检索的递归算法
实验项目名称 分治法写一个二分检索的递归算法 实验成绩 实验者 桂江亨 专业班级 软件Sy1001 组别 同组者 实验日期 年 月 日 第一部分:实验分析与设计(可加页)
实验内容(问题域描述)
1. 利用分治法,编写一个检索算法,并在计算机上实现,同时进行时间复杂性分析。本实验是综合型、设计型实验,在实验中需要综合运用《数据结构》中的递归方法和树的知识;《程序设计》中的数组、条件控制、循环控制和《算法设计与分析》中的分治法、计算时间的渐进表示和算法的时间复杂性分析等等方面的知识。
2.实验内容:
(2.1)利用分治法,写一个二分检索的递归算法,并利用任何一种语言,在计算机上实现,同时进行时间复杂性分析。
3.实验要求:
首先要对实验内容进行描述,用伪代码设计算法,并对算法在最好,最差和平均情况下的时间复杂性进行分析,然后C/C++或JAVA语言编写程序对算法实现,同时用具用代表性的数据进行测试,实验后,进行实验总结,描述设计过程步骤及各步骤含义。该实验要求用递归实现。
实验基本原理与设计(包括实验方案设计,实验手段的确定,实验步骤,用硬件逻辑或者算法描述)
在本次试验中假设要检索的的数据vectorint data中的元素并没有按从大到小的顺序排好序。因此算法将遍历数据的每一个元素,比较该元素与目标预算e的大小关系,如果相等则将该元素在数组里面的序号压入vectorint result数组中。当遍历完成时,输出result数组。
为了体现分支的思想,遍历并不是从头依次遍历的数组的结尾,而是将数组从中间分开,然后依次二分检索数组的前半部分和后半部分。
下面是伪代码
vectorint data, result;
binarySearch( const vectorint data, vectorint result,
int e, int beg, int end ) {
if( beg == end ) {
if( data[beg] == e )
result.push_back( beg );
} else {
int middle = ( beg + end ) / 2;
binarySearch( data, result, e, beg, middle );
binarySearch( data, result, e, middle + 1, end );
}
}
算法时间复杂性分析
在这个递归算法中,问题被分解成两个子问题,假设用T(n)表示问题规模为n的二分检索程序的时间复杂性,那么有下面的公式成立:
T( n ) = T( n / 2 ) + T( n / 2 ) = 2 * T( n / 2 )
因此有:
T(n) = 2 * 2 * T( n / 2 / 2 )
= 2 * 2 * 2 * T( n / 2 / 2 / 2 )
= pow( 2, log( 2, n ) ) * T( n / pow( 2, log( 2, n ) ) )
当迭代次数足够多时,最终会得到:
T(n) = pow( 2, log( 2, n ) ) * T( 1 )
而T(1) = 1, 故:T(n) = n。
实际上,这个递归算法和一个for循环的效率是一样的,因为它最终还是要对每一个元素进行检索。而且该算法的最好和最差以及平均时间复杂度都是O(n)。
算法空间复杂性分析
该算法只需要一个数组存储查找的结果,最好情况下为C,最坏为O(n),平均为O(n)。
主要仪器设备及耗材
PC一台,VC++ Express Edition 2008.
第二部分:实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
本次试验遇到的一个问题是输入数据到vectorint data数组,然后再按Ctrl + Z停止输入后,不能再输入值给要查找的元素e。后来才知道,C++标准程序库把输入流当做文件,按下Ctrl + Z后表示输入流到达文件尾,不能继续往下读了。为了使输入流重新开始读数据,并需调用clear()函数来清除文件尾状态标记。
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
下面是程序的源代码
#incl
您可能关注的文档
- 扩频通信系统MATLAB仿真的开题报告.doc
- 指南通信监理文档模板11.doc
- 掌握几种网络应用体系结构的特点;掌握域名系统DNS的工作原理.ppt
- 携程电子商务方面介绍的.ppt
- 支持向量机的分类算法探索与实践.doc
- 改变生活的通信技术上海大学通信与信息工程学院.pptx
- 改进的KMeans算法实现车牌字符的分割.doc
- 政务网办公自动化使用资料.doc
- 教学图形图像处理89538.doc
- 数据库原理中SQL语句实验指导方案及答案.doc
- 2024年山西省闻喜县《一级注册建筑师之建筑物理与建筑设备》资格考试必背100题题库及答案【易错题】.docx
- 2024年山西省闻喜县《一级注册建筑师之建筑物理与建筑设备》考试大全附答案【A卷】.docx
- 2024年山西省长治县《一级注册建筑师之建筑物理与建筑设备》资格考试题库带答案解析.docx
- 2024年山西省长治县《一级注册建筑师之建筑物理与建筑设备》资格考试必背100题题库(典优).docx
- 2024年山西省长治县《一级注册建筑师之建筑物理与建筑设备》资格考试完整题库(典型题).docx
- 2024年山西省长治县《一级注册建筑师之建筑物理与建筑设备》考试通关秘籍题库A4版.docx
- 2024年山西省长治县《一级注册建筑师之建筑物理与建筑设备》资格考试必刷100题内部题库(含答案).docx
- 2024年山西省长治县《一级注册建筑师之建筑物理与建筑设备》资格考试内部题库(网校专用).docx
- 2023年江西省赣州市名校九年级物理第一学期期末经典模拟试题含解析.doc
- 2024年山西省长治县《质量员之设备安装质量基础知识》资格考试必背100题真题及答案【易错题】.docx
文档评论(0)