算法时间的计算程序
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毫秒。
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毫秒。
相关文章推荐
- 一个c++中计算算法运行时间的程序
- java计算程序(算法)执行时间
- Windows环境是使用C语言计算程序或算法执行时间的不同粒度实现
- <编程>比较两种素数表生成算法+计算程序运行时间+通过CMD重定向测试程序
- php使用microtime(true)计算php程序代码执行消耗时间
- 计算程序的运行时间
- java 计算程序运行的时间
- 第14话:如何计算算法的时间复杂度
- 计算程序运行时间(C语言)
- c/c++日期时间的计算程序
- C#计算程序执行过程花费时间的方法
- 计算C++程序运行时间总结
- C#计算程序运行时间的三种方法
- 算法分析---外星人计算PI的程序
- c++ 计算程序运行时间
- (5)计算程序耗时间
- 计算上班时间小程序部分代码
- 利用系统滴答时间计算实际程序运行时间
- 计算一段程序的执行时间
- 计算程序运行时间