Algs4-1.4.39 改进倍率测试的精度
1.4.39 改进倍率测试的精度。修改DoublingRation,使它接受另一个命令行参数来指定对于每个N值调用timeTrial()方法的次数。用程序对每个N执行10、100和1000遍实验并评估结果的准确程度。
答:
public class E1d4d39
{
public static double timeTrial(int N)
{
int MAX=1000000;
int[] a=new int[N];
for (int i=0;i<N;i++)
a[i]=StdRandom.uniform(-MAX,MAX);
Stopwatch timer=new Stopwatch();
int cnt=ThreeSum.count(a);
return timer.elapsedTime();
}
//
public static void main(String[] args)
{
//
double prev=0.0;
double time=0.0;
for (int i=10;i<=1000;i=10*i)
{
prev=0.0;
for(int j=1;j<=i;j++)
prev=prev+timeTrial(125);
//
for (int N=250;N<=8000;N+=N)
{
time=0.0;
for(int k=1;k<=i;k++)
{
time=time+timeTrial(N);
}//for k
StdOut.printf("runTime=%5d N=%6d timeSecond=%7.1f ratio=%5.1f\n",i,N,time/i,time/prev);
prev=time;
}//for N
}//for i
}//end main
}//end class