




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算法设计与分析 11信本 余启盛 118632011004一、上机目的及内容1.上机内容求两个自然数m和n的最大公约数。2.上机目的(1)复习数据结构课程的相关知识,实现课程间的平滑过渡;(2)掌握并应用算法的数学分析和后验分析方法;(3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。二、实验原理及基本技术路线图(1)至少设计出三个版本的求最大公约数算法;(2)对所设计的算法采用大O符号进行时间复杂性分析;(3)上机实现算法,并用计数法和计时法分别测算算法的运行时间;(4)通过分析对比,得出自己的结论。三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VISUAL C+6.0软件 matlab .2008四、实验方法、步骤(或:程序代码或操作过程)实验采用三种方法求最大公约数1、连续整数检测法。2、欧几里得算法3、蛮力法 (短除法)根据实现提示写代码并分析代码的时间复杂度: 算法一:连续整数检测法。CommFactor1输入:两个自然数m和n输出:m和n的最大公约数1. 判断m和n哪个数小,t=min(m,n)2. 如果m%t=0&n%t=0 ,结束 2.1 如果t不是m和n的公因子,则 t=t-1; 3. 输出t ; 根据代码考虑最坏情况他们的最大公约数是1,循环做了t-1次,最好情况是只做了1次,可以得出O(n)=n/2;算法二:欧几里德算法 CommFactor2输入:两个自然数m和n输出:m和n的最大公约数1. r = m % n;2. 循环直到 r 等于0 2.1 m = n; 2.2 n = r; 2.3 r = m % n;3. 输出 n ;根据代码辗转相除得到欧几里得的: O(n)= log n算法三:蛮力法 (短除法) CommFactor3输入:两个自然数m和n输出:m和n的最大公约数1. factor=1;2. 循环变量i从2-min(m,n),执行下述操作:2.1 如果i是m和n的公因子,则执行下述操作: 2.1.1 factor=factor*i; 2.1.2 m = m / i; n = n / i;2.2 如果i不是m和n的公因子,则 i=i+1;3. 输出factor; 根据代码考虑最坏情况他们的最大公约数,循环做了i-1次;最好情况是只做了1次,可以得出: O(n)=n/2;MATLAB程序代码:main.mx=fix(rand(1,1000)*1000);y=fix(rand(1,1000)*1000);for i=1:1000 A(i)=CommFactor2(x(i),y(i);endx=x;y=y;算法一:function r=CommFactor1(m,n) tic;if mn)t=n;else t=m;while(t) if(m%t=0&n%t=0)break; else t=t-1;endendr=ttoc;算法二: function r=CommFactor2(m,n)tic;r=mod(m,n);while r=0 m=n; n=r; r=mod(m,n);endr=n;toc;算法三: function factor=CommFactor3(m,n)tic;factor=1;themax=max(m,n);for i=2:1:themax while (mod(m,i)=0)&(mod(n,i)=0) factor=factor*i; m=m/i; n=n/i; endendtoc;三种算法时间复杂度比较:(c+语言)#includeiostream.h#includestdio.h#includestdlib.h#includetime.h#define N 100int w,w2,w3;/用于计数int f1(int m,int n)int t;if(mn)t=n;else t=m;while(t) if(m%t=0&n%t=0)break;else t=t-1;w+;return t;int f2(int m,int n)int r;r=m%n;w2=1;while(r!=0)m=n; n=r; r=m%n;w2+;return n;int f3(int m,int n) int i, factor = 1; for (i = 2; i = m & i = n; i+) while (m % i = 0 & n % i = 0) /此处不能用if语句 factor = factor * i; m = m / i; n = n / i; w3+; return factor;int main(void) int m,n;printf( 请输入m,n :n);scanf(%d%d,&m,&n);int k;k=f1(m,n); printf( 方法一最大公约数为: %dn,k);k=f2(m,n);printf( 方法二最大公约数为: %dn,k);k=f3(m,n);printf( 方法三最大公约数为: %dn,k);printf(n-n);printf(n计数器显示结果:nnn); printf(方法一: %d n,w2); printf(方法二: %d n,w); printf(方法三: %d n,w3);printf(n-n);float a,i; clock_t start,finish; double usetime;i=0; start= clock(); while (i1000000)f1(m,n);i+;finish=clock(); usetime= finish-start; printf( 方法一用时%.f*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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 能力提升2.0方案解读
- 《窗边的小豆豆》课件
- 护理人员应知应会
- 皮牵引的护理诊断和措施
- 2025设备抵押贷款合同
- 2025二手车买卖合同范本
- 销售区域经理工作总结
- 公司总经理安全培训课件
- 红斑狼疮护理
- 2025解除购销合同协议书
- 2025年三方股权合作合同协议书
- 地方病竞赛试题及答案
- 弘扬伟大抗战精神为实现中华民族伟大复兴而奋斗2025-2026学年高二上学期爱国主义教育主题班会
- 社工抗压与情绪处理课件
- 单元考点必刷卷 (一)(含答案)我上学啦 2025-2026学年北师大版一年级数学上册
- 农村厨师安全培训课件
- 2025-2026学年人教版(2024)小学体育与健康三年级(全一册)教学设计(附目录P114)
- 起重机作业人员Q2证理论考试练习题含答案
- 四川遂宁2021-2024年中考满分作文64篇
- (完整)中小学“学宪法、讲宪法”知识竞赛题库及参考答案
- 轧钢安全规程培训课件
评论
0/150
提交评论