算法时间的计算程序

近期在学习算法,严慰敏的数据结构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毫秒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值