小鲤算法之算法时间计算

     小鲤只是一条想要好运的笨鲤鱼o(* ̄▽ ̄*)ブ

你的程序运行了多久呢?怎么看呢?别着急,小鲤为你提供了两个办法 o(^▽^)o 

1.时钟打点

#include"stdio.h"
#include"time.h"
clock_t start,stop;                                  //(1)
void Myfunction(void){            
	                                                 //(2)
}
double duration;
int main()
{
 ......                                              //(3)
  start =clock();
  Myfunction();
  stop =clock();
  duration =((double)stop-start)/CLK_TCK;
 ......                                              //(3)
  printf("%.2f",duration);
  return 0;
}

(1)clock_t是clock()函数返回的变量名;clock()函数在time.h中

(2)这里是你想要测试运行的程序

(3)一些不在测试范围的准备工作或者处理放在这里:

我们来测试下:

item:给定多项式在定点的值:

 

 好了,我们给出两个函数:

double f1(int n,double a[],double x)       //(1)
{
double p=a[n];
for(int i=n;i>0;i--)
p=a[i-1]+x*p;
return p;
}

double f2(int n,double a[],double x)      //(2)
{
double p=a[0];
for(int i=1;i<n;i++)
p+=(a[i]*pow(x,i));
return p;
}

(1)秦九韶公式

(2)一般的多项式加和

这里不做更多的赘述了。但是运行后(请你自己找一个多项式带入)时间都是0.00e

但是这两个函数的时间可不是一样的呀!

想到物理中的累加法了吗? (●´▽`●)

将被测函数重复运行多次,求平均值

于是,我们有了:

#define MAXK  1e7            //(1)
......
for(i=0;i<MAXk;i++){         //(2)
 myfunction();

}
......

这里仅给出循环部分。

(1)宏定义,defne;1e7是科学计数法,等价于十的七次方;

(2)循环MAXK-1次;

有人会问了,小鲤,每次都要这样吗?如果我的数据规模是千万级,甚至是亿万级呢?我的代码再来三个嵌套for循环,我怎么会等到我的电脑给出结果啊

所以,我们更经常使用的是第二种方法,来看程序运行时间

(至于为啥有第一种,他只是你闲的无聊的耍酷工具而已ヽ(○´∀`)ノ)

2,时间复杂度

这块内容其实东西不少,但是小鲤怎么忍心让读者大大看什么大O啊,小O啊什么奇怪的符号啊(才不是小鲤懒呢)

总结有这么几点,你会了就🆗了

1.计算你的程序时间复杂度,数据规模都是n(这里的n可以看作一个无穷级数,所以时间复杂度可以看作渐进的)

2,我们最常用的是大o,即

 我们在推导大O阶时,有这样的操作

①不计算常数余项,如+5,-3这样的小项

②抓大放小,如n^{2}+n我们只看n^{2}项,此外我们不看系数,系数常被忽略;

③对于logn,我们不关心它的底数;

 其他你还要注意的:

 学会了吗?

如果我的文章对你有帮助,不要吝惜你的点赞,小鲤希望得到你的支持ლ(´ڡ`ლ)

求三连和关注!!!

部分内容来自mooc数据结构(浙大)和算法图解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值