如何比较两个算法的效率

在学算法的时候,经常会涉及分析算法的复杂度和效率的问题,按照书本上的理论通常也能够大概推出个结论。通常都是根据算法中重要的语句去推算,例如for 循环语句等。那么有没有可以用程序去真正上机实验的办法呢?

      其实方法也是很简单,如果我们用的是C语言,可以利用#include <sys/timeb.h> 文件中的ftime()函数完成。具体举例如下:

      程序1:

#include <stdio.h>
#include <sys/timeb.h>

int main(void)
{
 timeb t1,t2;
 long t;
 double x,sum = 1, sum1;
 int i,j,n;
 printf("请输入x n: ");
 scanf("%lf%d",&x,&n);
 ftime(&t1);//求程序运行到此的当前时间
 for (i = 1;i <= n;i++)
 {
  sum1 = 1;
  for (j = 1;j <= i;j++)
  {
   sum1 = 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); 

 return 0;
}

 

输入:123   10000

输出:sun= 0.991935 用时 325 毫秒

 

 

程序2:

#include <stdio.h>
#include <sys/timeb.h>

int main(void)
{
 timeb t1,t2;
 long t;
 double x,sum = 1, sum1 = 1;
 int i,n;
 printf("请输入x n: ");
 scanf("%lf%d",&x,&n);
 ftime(&t1);//求程序运行到此的当前时间
 for (i = 1;i <= n;i++)
 {
  sum1 = 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); 

 return 0;
}

输入:123 10000

输出:sun= 0.991935 用时 1 毫秒

 

 

   分析: 其实两个函数实现的功能都是一样的,计算 1-1/x+1/x*x...   第一个程序的频度表达式为(1+n)*n/2,它的时间复杂度是n的平方。第二个实现程序的频度表达式为 n,时间复杂度也是n。通过上机实验,在输入相同的数据的情况下,第二个实现程序的用时远远比第一个要快。

 

    通过简单调用一个计算时间的函数,就可以轻松比较出两个实现同样功能的程序的效率。不过在现今计算机速度超快的时代,我们也不会计较这样细微的差别。而一个程序我们更多的是考虑它的可读性等问题。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值