算法的复杂度

算法 Algorithm

特征

1.有限的指令集
2.不一定有输入,但一定要有输出
3.有穷性,在有限步骤之后停止
4.每一条指令明确无歧义,计算机可处理,不依赖任何一种计算机语言和具体的实现手段。

C语言程序段运行时间的测量

必须调用time.h
clock():捕捉从程序开始运行到该函数被调用时所消耗的时间,时间单位是clock tick,“时钟打点”。
常数CLK_TCK:机器时钟每秒的打点数。(不同机器该常数可能有差异)

原理:程序开始运行后,机器时钟一直在打点,到了待测程序段前,调用一次clock(),返回此时的打点数start;待测程序段运行完后,再调用一次,得到打点数stop。两者之差除以CLK_TCK,得到时间,单位为sec,即s。通过这种方式便可测出某一段程序的运行时间。

具体程序如下:

#include<stdio.h>
#include<time.h>

clock_t start,stop //clock_t是函数clock()的返回变量类型
double duration

int mian
{
/*不在测试范围内的准备工作写在start之前*/
 start = clock(); //开始计时
 
  MyFunction; //待测的程序段MyFunction
  
  stop = clock();  //终止计时
  duration = (double)((stop-start)/CLT_TCK);
  /*其它不在测试范围内的处理写在stop之后*/
  printf("duration = 6.2e%\n",duration);
}

算法的复杂度

空间复杂度s(n):占用存储单元的长度
时间复杂度t(n):耗费时间的长度
需要我们关注的是,随着要处理数据规模的增大,复杂度的增长趋势。所以引入复杂度的渐进表示法。
O(f(n)):复杂度的上界
Ω(f(n)):复杂度的下界
θ(f(n)):上界和下界相当时的统一表示

它们是不唯一的。比如某个程序复杂度为n的指数倍(t的平方、立方…),那么f(t)表示的指数不同,其O(f(t))就不同。研究时不能使上界过大,下界过小就行。

分析技巧:

在这里插入图片描述

复杂度比较:

2 n &gt; n 2 &gt; n l o g n &gt; n &gt; l o g n 2^{n}&gt;n^2&gt;nlogn&gt;n&gt;logn 2n>n2>nlogn>n>logn
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值