您的位置:首页 > 其它

算法时间的计算程序

2010-07-14 22:41 141 查看
近期在学习算法,严慰敏的数据结构C语言版,看着很费解,第一个程序是算法的时间计算,其C语言代码如下:

1 #include<stdio.h>
2 #include<sys/time.h>
3
4 int gettimeofday(struct timeval *tv, struct timezone *tz);
5
6
7
8 void main(void)
9 {
10 struct timeval tpstart, tpend;
11 float timeuse;
12
13 double x, sum=1, sum1;
14 int i, j, n;
15 printf("Enter x n:");
16 scanf("%lf%d", &x, &n);
17 gettimeofday(&tpstart,NULL);
18 for(i=1; i<=n; i++)
19 {
20
21 sum1=1;
22 for(j=1; j<=i; j++)
23 sum1=sum1*(-1.0/x);
24
25 sum+=sum1;
26 }
27 gettimeofday(&tpend,NULL);
28 timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+(tpend.tv_usec-tpstart.tv_usec);
29
30 printf("sum=%lf Used time=%lf/n", sum, timeuse);
31 }
32
整个算法的核心是gettimeofday()函数。很重要也很精确。这个要牢记。经过多次的调试,熟练。这是在Linux下的程序,但是转移到Win下使用DEV编译就出现问题,这个没有想好怎么修改。同时找到了第二种算时间的函数clock。经使用clock函数后代码如下:

/*My Algo
Count the time for Formula.
Formula:1-1/x+1/x*x…*/
#include<stdio.h>
#include<sys/time.h>

void main(void)
{
time_t t;
float timeuse;
double x, sum=1, sum1;
int i, j, n;
printf("Enter x n:");
scanf("%lf%d", &x, &n);
t=clock();
for(i=1; i<=n; i++)
{

sum1=1;
for(j=1; j<=i; j++)
sum1=sum1*(-1.0/x);

sum+=sum1;
}
timeuse=clock()-t;

printf("sum=%lf Used time=%lf/n", sum, timeuse);
scanf("%d",&j);
}

该程序运行时输入x=8,n=2,计算结果为sum=0.890625 Used time=0.000000

书上给的代码是Cpp的,如下:

// algo1-1.cpp Count the time for Formula.1-1/x+1/x*x…
#include<stdio.h>
#include<sys/timeb.h>
int main()
{
timeb t1,t2;
long t;
double x,sum=1,sum1;
int i,j,n;
printf("请输入x n:");
scanf("%lf%d",&x,&n);
ftime(&t1); /* Count time start */
for(i=1;i<=n;i++)
{
sum1=1;
for(j=1;j<=i;j++)
sum1=sum1*(-1.0/x);
sum+=sum1;
}
ftime(&t2); /* Count time end */
t=(t2.time-t1.time)*1000+(t2.millitm-t1.millitm); /* timeuse is the result of Count */
printf("sum=%lf 用时%ld毫秒/n",sum,t);
scanf("%d", &j);
}

其改进版为:

// algo1-2.cpp 计算1-1/x+1/x*x…的更快捷的算法
#include<stdio.h>
#include<sys/timeb.h>
void main()
{
timeb t1,t2;
long t;
double x,sum1=1,sum=1;
int i,n;
printf("请输入x n: ");
scanf("%lf%d",&x,&n);
ftime(&t1); // 求得当前时间
for(i=1;i<=n;i++)
{
sum1*=-1.0/x;
sum+=sum1;
}
ftime(&t2); // 求得当前时间
t=(t2.time-t1.time)*1000+(t2.millitm-t1.millitm); // 计算时间差
printf("sum=%lf 用时%ld毫秒/n",sum,t);
}
x=8,n=2 计算结果为:sum=0.890625 用时0毫秒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: