一 实验目的和要求
(1)复习数据结构课程的相关知识,实现课程间的平滑过渡;
(2)掌握并应用算法的数学分析和后验分析方法;
(3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
二 实验内容
(1) 至少设计出三个版本的求最大公约数算法;
(2) 对所设计的算法采用大O符号进行时间复杂性分析;
(3) 上机实现算法,并用计数法和计时法分别测算算法的运行时间;
三 实验环境
VC++6.0
四 设计思想及实验步骤
先分别用三种算法求出一组m和n的最大公约数,判断三个算法都是可行的,然后用text函数分别调用三个求最大公约数的函数,将k从100,每次扩大10倍,到50000000. 在每个k值附近求得1000对(m,n),调用一种函数运算1000次,用时间函数和计数器求得函数运行1000次的运行时间和计数,并求出每次的平均时间和平均计数。然后根据结果分别做出平均时间和平均计数的图标并进行分析。
实验步骤:
1. 设计三种求最大公约数的算法和测算平均时间和平均计数的算法
2. 对所设计的算法采用大O符号进行时间复杂性分析
3. 实现算法并运行,分别测算每个算法的平均时间和平均计数
4. 根据结果分别作出平均时间和平均计数的图标
5. 根据图标分析的出结论。
主要基本算法描述如下:
CommFactor1 (欧几里得)
输入:两个自然数m和n
返回:m和n的最大公约数
1.Count=0 ; r =m%n;
2. 循环直到r=0
2.1 m=n;
2.2 n=r;
2.3 r=m%n;
2.4 count++;
3. num+=count;