Linux下算法效率的分析和测量

    首先用两种方法计算1-1/x+1/x*x……然后比较其所用时间。本文涉及Linux下测量毫秒级时间精度的问题。

方法1:

//Write in Ubuntu11.04
#include<stdio.h>
#include<time.h>
#include<sys/time.h>
int main()
{
   struct timeval t_start,t_end;
   double x,sum=1,sumx=1;
   int  n,j,i;
   printf("Input x n\n");
   scanf("%lf %d",&x,&n);//lf 输入double 类型
   gettimeofday(&t_start,NULL);//第一个参数存放当前时间,第二个存放时区信息
   for(j=0;j<n;j++)
   {
      for(i=0;i<=j;i++)
         sumx=sumx*(-1/x);
      sum+=sumx;
   }
   gettimeofday(&t_end,NULL);
   printf("sum=%lf It takes %ldms.\n",sum,(t_end.tv_sec-t_start.tv_sec)*1000+(t_end.tv_usec/1000-t_start.tv_usec/1000));//计算所用时间(毫秒)(ld输出long int)
   return 0;
}
结果:

方法2:

#include<stdio.h>
#include<time.h>
#include<sys/time.h>
int main()
{
   struct timeval t_start,t_end;
   double x,sum=1,sumx=1;
   int  n,j,i;
   printf("Input x n\n");
   scanf("%lf %d",&x,&n);//lf 输入double 类型
   gettimeofday(&t_start,NULL);//第一个参数存放当前时间,第二个存放时区信息
   for(j=0;j<n;j++)
   {
      sumx=sumx*(-1/x);
      sum+=sumx;
   }
   gettimeofday(&t_end,NULL);
   printf("sum=%lf It takes %ldms.\n",sum,(t_end.tv_sec-t_start.tv_sec)*1000+(t_end.tv_usec/1000-t_start.tv_usec/1000));//计算所用时间(毫秒)(ld输出long int)
   return 0;
}
结果如下:


方法一时间复杂度为n^2,用时561ms,方法二时间复杂度为n,用时0ms。

在Linux 下用gettimeofday()可计算出精确到微妙级的时间,参考资料如下:

编译时遇到error: ‘for’ loop initial declarations are only allowed in C99 mode的问题,解决方法如下:






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值