算法分析与设计求最大公约数问题实验报告Word文档下载推荐.docx
- 文档编号:17471147
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:6
- 大小:23.75KB
算法分析与设计求最大公约数问题实验报告Word文档下载推荐.docx
《算法分析与设计求最大公约数问题实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《算法分析与设计求最大公约数问题实验报告Word文档下载推荐.docx(6页珍藏版)》请在冰豆网上搜索。
不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
(4)至少设计出三个版本的求最大公约数算法;
(5)上机实现算法,并用测算三种算法的运行时间;
(6)经过分析对比,得出自己的结论。
二实验内容
设计三种算法求两个自然数m和n的最大公约数,并分析每种算法运行所需时间.
三实验环境
PCWin7系统,VISUALC++6.0
四设计思想及实验步骤
1.欧几里得辗转相除算法:
①输入两个正整数m,n(m>
n);
②求出两个数的最大值Max和最小值Min;
③计算Max除以Min所得的余数r;
④Max=Min,Min=r;
⑤若r=0,则m,n的最大公约数等于Max;
否则转到②;
⑥输出最大公约数Max。
2.蛮力法算法:
①输入两个正整数m,n;
②令常量factor=1;
循环变量i从2~min(m,n);
③如果i是m和n的公因子,则执行④;
④factor=factor*i;
m=m/i;
n=n/i;
⑤如果i不是m和n的公因子,则i=i+1;
⑥输出factor;
3.欧几里得减法算法:
①输入两个正整数a,b;
③若Max等于Min,转到⑥;
④把Max-Min的差赋予r;
⑤如果Min>
r,那么把Min赋给Max,把r赋给Min;
否则把r赋给Max,执行③;
⑥输出最大公约数Min。
测试三种算法,在例举数的范围内产生随机数,且在每个范围内运行1000次,求出所需总时间,最后输出计算每种算法平均执行一次所需的时间。
六核心源代码
//210890王朔.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"
stdafx.h"
stdio.h"
stdlib.h"
time.h"
windows.h"
intCommFactor1(intm,intn);
intCommFactor2(intm,intn);
intCommFactor3(intm,intn);
intmain(intargc,char*argv[])
{
inta[10]={10000,0,40000,80000,100000,00,500000,1000000,000,4000000};
LARGE_INTEGERBegainTime;
LARGE_INTEGEREndTime;
LARGE_INTEGERFrequency;
QueryPerformanceFrequency(&
Frequency);
QueryPerformanceCounter(&
BegainTime);
srand((unsigned)time(NULL));
for(inti=0;
i<
10;
i++)
{
for(intj=0;
j<
1000;
j=j+1){
doublek=(rand()*0.1);
longm=(long)(a[i]+k);
k=(0.1*rand());
longn=(long)(a[i]-k);
CommFactor1(m,n);
}
EndTime);
printf("
算法一总耗时:
%.10f秒\n"
(double)(EndTime.QuadPart-BegainTime.QuadPart)/(Frequency.QuadPart*10000));
system("
pause"
);
return0;
}
intCommFactor1(intm,intn){
intc=m%n;
while(c!
=0){
m=n;
n=c;
c=m%n;
}
returnn;
intCommFactor2(intm,intn){
inti,factor=1;
for(i=2;
i<
=m&
&
=n;
i++){
while(m%i==0&
n%i==0){
factor=factor*i;
m=m/i;
returnfactor;
intCommFactor3(intm,intn){
inti,r;
if(n>
m){
i=m;
m=n;
n=i;
r=m%n;
while(r!
m=m-n;
七实验结果及分析
三种算法
算法运行时间
欧几里得辗转相除法时间(ms)
蛮力法时间(ms)
欧几里得减法时间(ms)
平均使用时间(ms)
0.0008929
3.9237605
0.0041045
八实验体会(包括本实验中遇到的问题、具体的解决方法、还没有解决的问题、实验收获等)
此次实验初步了解了算法分析,三种算法虽然结果相同可是效率却不同。
对于复杂度的求解,能够根据我的结果分析得到欧几里得辗转相除算法的是最优算法,欧几里得减法其次,最复杂的是蛮力法。
在实验中,对于使用产生随机数测试算法的问题有了新的认识和了解,并学会了使用时间测试函数.
从这次实验中,我复习了C语言代码,同时也经过算法分析用三种方法求解出了最大公约数这个问题。
从这个试验的结果我了解到了算法的优与劣的差别,虽然得到的是同样的结果,可是需要的时间和资源却相差很大,这提示我们在以后写算法的时候要找出最优算法。
可见算法分析与设计课程的对计编程的人来说是多么的重要,在以后写程序过程中要时刻提醒自己找最优算法,当然得先学会O(n)的分析。
在以后的学习中我要学会多实践、多分析,在不停的改正错误中提高自己。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 最大公约数 问题 实验 报告