您的位置:首页 > 其它

基于数学建模的数据拟合和检验,完成对于gcd(m,n)的算法,做一个基于时间记录的实验,确定它们的效率类型

2019-03-30 09:44 330 查看

假设本题需要,对于gcd(m,n)的算法,做一个基于时间记录的实验,确定它们的效率类型
一、利用Java自带的System.currentTimeMillis();获取程序运行的时间。
二、为避免人为主观因素的影响,利用Java自带的(int)(Math.random()*100)+1;产生随机数进求余。
三、为了避免偶然性,将多次记录执行时间,取平均值。
四、利用SPSS,将所得数据进行正态性检验,查看执行时间t是否满足正态分布。
五、当执行时间t满足正态分布时,利用SPSS将所得数据进行Pearson检验,查看是否可以拟合出效率函数。
六、当Pearson检验通过后,利用Matlab的cftool工具做效率类型分析,并得出效率函数。
七、通过Matlab进行残差分析,判定拟合效率函数是否可行。
八、最后得出结论。

对于一和二:利用Java自带的System.currentTimeMillis();获取程序运行的时间。为避免人为主观因素 的影响,利用Java自带的(int)(Math.random()*100)+1;产生随机数进求余。

Java代码

import java.util.*;
public class Test {
//用于计算gcd(m,n)的欧几里得算法
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
long startTime = System.currentTimeMillis();
for(int m=1;m<100000;m++) {
System.out.println("最大公约数为:" + gcd((int)(Math.random()*100+1),(int)(Math.random()*100+1)));
}
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
}

public static int gcd(int m,int n) {
int r = 1;
while(n != 0) {
r = m%n;
m = n;
n = r;
}
return m;
}
}

对于三:为了避免偶然性,将多次记录执行时间,取平均值。
为了避免偶然性,将程序执行多次取平均值
当循环10000次时程序运行时间为:





平均值为:139ms

当循环20000次时程序运行时间为:




平均值为:206ms

当循环30000次时程序运行时间为:





平均值为:274ms 当循环40000次时程序运行时间为:




平均值为:368ms

当循环50000次时程序运行时间为:




平均值为:424ms

对于四:利用SPSS,将所得数据进行正态性检验,查看执行时间t是否满足正态分布。
SPSS检验结果如下:

结论:因为Sig = 0.200 > 0.05所以执行时间t满足正态分布

对于五:当执行时间t满足正态分布时,利用SPSS将所得数据进行Pearson检验,查看是否可以拟合出效率函数。

n与t的相关系数为0.998
结论:输入变量n与执行时间t的线性相关程度大,可用线性函数拟合。

对于六:当Pearson检验通过后,利用Matlab的cftool工具做效率类型分析,并得出效率函数。

Matlab代码

%拟合代码
>> t = [139 206 274 368 424];
>> n = [10000 20000 30000 40000 50000];
>> cftool(n,t)



结论:Time = 0.00732*x + 62.6
对于七:通过Matlab进行残差分析,判定拟合效率函数是否可行。

%残差分析代码
>> t = t';
>> n =n';
>> k = length(n);
>> X=[ones(k,1) n];
>> [b,bint,r,rint,s]=regress(t,X);
>> rcoplot(r, rint)

b =
62.6000
0.0073

bint =
31.1469 94.0531
0.0064 0.0083
r =
3.2000
-3.0000
-8.2000
12.6000
-4.6000

rint =
-26.6593 33.0593
-43.5318 37.5318
-44.9468 28.5468
-3.4184 28.6184
-32.7158 23.5158
s =
0.9951 603.4054 0.0001 88.8000

结论:=0.9951,所以Time = 0.00732*x + 62.6作为效率函数是可型的。

对于八:最后得出结论。
结论:因为Time函数为一次函数,所以欧几里得算法的时间复杂度为O(n)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐