最大公约数的三种算法复杂度分析时间计算.docxVIP

最大公约数的三种算法复杂度分析时间计算.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
精品文档 精品文档 PAGE PAGE7 精品文档 PAGE v1.0 可编辑可修改 昆明理工大学信息工程与自动化学院学生实验报告 (2011 —2012 学年第1 学期) 课程名称:算法设计与分析 开课实验室:信自楼机房 4442011 年10月12日 年级、专业、班 计科092 学号 5214 姓名 徐兴繁 成绩 实验项目名称 求最大公约数 指导教师 吴晟 教 师 评 语  该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强□ B.中等 □ C.差□ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 实验报告是否规范: A.规范□ B.基本规范□ C.不规范□ 实验过程是否详细记录: A.详细□ B.一般 □ C.没有□ 教师签名: 年 月 日 一、上机目的及内容 上机内容 求两个自然数 m和n的最大公约数。 上机目的 1)复习数据结构课程的相关知识,实现课程间的平滑过渡; 2)掌握并应用算法的数学分析和后验分析方法; 3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。 二、实验原理及基本技术路线图(方框原理图或程序流程图) 1)至少设计出三个版本的求最大公约数算法; 2)对所设计的算法采用大O符号进行时间复杂性分析; 3)上机实现算法,并用计数法和计时法分别测算算法的运行时间; 4)通过分析对比,得出自己的结论。 1-1- v1.0 可编辑可修改 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUALC++软件 四、实验方法、步骤(或:程序代码或操作过程) 实验采用三种方法求最大公约数 1、连续整数检测法。 2、欧几里得算法 3、分解质因数算法 根据实现提示写代码并分析代码的时间复杂度: 方法一: intf1(intm,intn) { intt; if(mn)t=n; elset=m; while(t) { if(m%t==0n%t==0)break; elset=t-1; } returnt; } 根据代码考虑最坏情况他们的最大公约数是 1,循环做了 t-1 次,最好情况是只做了 1次,可以得 出O(n)=n/2; 方法二:intf2(intm,intn) { 2-2- v1.0 可编辑可修改 intr; r=m%n; while(r!=0) { m=n; n=r; r=m%n; } returnn; } 根据代码辗转相除得到欧几里得的 O(n)=log n 方法三: intf3(intm,intn) { inti=2,j=0,h=0; inta[N],b[N],c[N]; while(in) { if(n%i==0) { j++; a[j]=i; n=n/i; } elsei++; } 3-3- v1.0 可编辑可修改 j++; a[j]=n; i=1; intu; u=j; while(i=j) { *10^(-6) 豪秒\n, usetime); i=0; start=clock(); while(i1000000) { f2(m,n); i++; } finish=clock(); usetime=finish-start; printf( 方法二用时%.f*10^(-6) 豪秒\n, usetime); i=0; start=clock(); while(i1000000) { f3(m,n); i++; 4-4- v1.0 可编辑可修改 } finish=clock(); usetime=finish-start; printf( 方法三用时%.f*10^(-6) 豪秒\n, usetime); } 五、实验过程原始记录 (测试数据、图表、计算等 ) 请给出各个操作步骤的截图和说明; 三种算法得到结果验证结果: 计数器:我想到的是做一次循环就加一 计算算法运行时间结果:在计算时间过程中因为计算机的运算速度很快,所以我利用了循环把时间精确得到10-6毫秒 5-5- v1.0 可编辑可修改 六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必须用计算纸或程序运行结果、改进、收获) 请结合实验的结果分析算法原理;在实验中遇到了些什么问题,如何解决;有什么收获等; 在本次实验中代码是独自完成的,一开始我感觉这个代码最多半小时就可以完成,但是第三个算法 的时候我分析了好久才写出来, 在计算三种方法运行时间的时候, 我一开始只精确到毫秒( ms),计算结 果都是零,后面我写了一个循环调试才发现是我的精确度还在不够,所以我想到了计算算法执行了 1000000次之后所用的时间,然后再求平均每次执行的时间。 结果分析:从前面的复杂度 O(n)的出欧几里得算

文档评论(0)

zdq6680 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档