Algs4-1.4.3画出DoublingTest正文中标准图像和对数图像
1.4.3修改DoublingTest,使用StdDraw产生类似于正文中标准图像和对数图像,概据需要调整比例使图像总能够充满窗口的大部分区域。
public class DoublingTest
{
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[][] p=new double[30][2];
p[0][0]=0.0;
p[0][1]=0.0;
int i=1;
for (int N=250;true;N+=N)
{
double time=timeTrial(N);
p[i][0]=N;
p[i][1]=time;
draw(p,i);
i++;
StdOut.printf("%7d %5.1f\n",N,time);
}
}
public static void draw(double[][] p,int i)
{
double x1=1.5*p[i][0];
double y1=1>1.5*p[i][1]?1:1.5*p[i][1];
StdDraw.setXscale(0,x1);
StdDraw.setYscale(0,y1);
StdDraw.setPenRadius(0.005);
StdDraw.clear();
for (int j=1;j<=i;j++)
StdDraw.line(p[j-1][0],p[j-1][1],p[j][0],p[j][1]);
}
}
public class DoublingTest
{
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[][] p=new double[30][2];
p[0][0]=0.0;
p[0][1]=0.0;
int i=1;
for (int N=250;true;N+=N)
{
double time=timeTrial(N);
p[i][0]=N;
p[i][1]=time;
draw(p,i);
i++;
StdOut.printf("%7d %5.1f\n",N,time);
}
}
public static void draw(double[][] p,int i)
{
double x1=1.5*p[i][0];
double y1=1>1.5*p[i][1]?1:1.5*p[i][1];
StdDraw.setXscale(0,x1);
StdDraw.setYscale(0,y1);
StdDraw.setPenRadius(0.005);
StdDraw.clear();
for (int j=1;j<=i;j++)
StdDraw.line(p[j-1][0],p[j-1][1],p[j][0],p[j][1]);
}
}