欢迎来到天天文库
浏览记录
ID:6817403
大小:1.04 MB
页数:73页
时间:2018-01-27
《算法分析与设计课程设计实验报告-求最大公约数实验报告实验(含源程序)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第1学期)课程名称:算法分析与设计开课实验室:信自楼机房4452011年10月12日年级、专业、班计科092学号1姓名刘召成绩实验项目名称求最大公约数指导教师张晶教师评语该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□该同学的实验能力:A.强□B.中等□C.差□该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□实验报告是否规范:A.规范□B.基本规范□C.不规范□实验过程是否详细记录:A.详细□B.一般□C.没有
2、□教师签名:年月日一、上机目的及内容上机内容求两个自然数m和n的最大公约数。上机目的(1)复习数据结构课程的相关知识,实现课程间的平滑过渡;(2)掌握并应用算法的数学分析和后验分析方法;(3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。二、实验原理及基本技术路线图(方框原理图或程序流程图)(1)至少设计出三个版本的求最大公约数算法;所设计的3个版本分别是:连续整数检测算法、欧几里得算法和分解质因数算法。这3个算法的流程图分别如下所示:-73--7
3、3--73--73-(2)对所设计的算法采用大O符号进行时间复杂性分析;在连续整数检测算法中,由于其最坏的情况是m与n除以t均不为0,直到t接近于0为止,此时所需时间接近m和n的较小者的值;在欧几里得算法中,最坏的情况是每次所得的都比n略小一点;但此时,它的数据还是以n倍递减;在分解质因数算法中,关键是分解质因数的时间复杂度和将所得质因数相乘合并的时间复杂度;在对m和n分解质因数时,最坏的情况是m和n的质因数都还是m和n;分解m和n用的时间复杂度是:;对于所得到的质因数求出它们的公共质因数时最坏的情况是
4、有较多的质因数,且两组质因数之间没有公共质因数,此时时间复杂度是两组质因数数目之平方;然而,对于所得到的质因数数量极为有限,因此对于最坏情况下的m和n的分解质因数,所得到的质因数的数量就更少,此时可以把对于质因数合并得公共质因数的时间复杂度忽略不计;最坏的时间复杂度是:(3)上机实现算法,并用计数法和计时法分别测算算法的运行时间;在我的电脑测试所得到的部分数据表格:连续整数检测时间(秒)欧几里得时间(秒)分解质因数时间(秒)最大公约数298.50057010.9200.0011302977770.099
5、00.01610.93400.154237134.26708.87317311.53504.04212111.45300.06154.199056.38629980.821013.71826.937048.90410.7700.03250.21200.00513.932024.061528.01303.869243.06200.23136938.99600.1323平均使用时间19.010.03更多测试数据请参见附录:数据测试清单!也可运行程序:两个正整数最大公约数求解简易系统(32位).exe自己进行
6、数据测试。-73-(2)通过分析对比,得出自己的结论。通过以上可以得知,欧几里得算法的性能最优,而分解质因数算法和连续整数检测算法的效率差不多,但是,当两个数据相差很大时,连续整数检测算法可能会比分解质因数算法占优势;当两个数所得到的最大质因数都较小时,分解质因数算法可能比连续整数检测算法占优势。三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VisualStudio2005软件四、实验方法、步骤(或:程序代码或操作过程)//两个正整数最大公约数求解简易系统.cpp:定义控制台应用程序的
7、入口点。/**该系统是为了计算两个正整数的最大公约数*该系统是在VisualStudio2005环境下编辑的,并通过VisualStudio2005环境下编译与运行*该版本使用了Boost函数库中的timer.hpp库函数,关于boost函数库可以参考网络上的boost社区*该程序制作人@刘召*该系统创建时间是2011年10月12日**/#include"stdafx.h"#include#include#include#include8、lib.h>#include#includeusingnamespacestd;usingnamespaceboost;longlongsmallerNumber(longlongi,longlongj){returni
8、lib.h>#include#includeusingnamespacestd;usingnamespaceboost;longlongsmallerNumber(longlongi,longlongj){returni
此文档下载收益归作者所有