数据结构与算法:算法的时间复杂度

一个算法花费的时间与算法中语句执行次数成正比,哪个算法中语句执行次数多,它花费的时间就多。一个算法中语句的执行次数称为语句频度或时间频度。记为T(n).

复制代码
//比如计算1到100所有数字之和,我们设计俩种算法:
int count = 0;
int end = 100;

//该算法中使用了for循环,循环了100+1(最后一次判断), 时间频度为T(100)=100+1, 即T(n)=n+1
for(int i=1; i<=end; i++){
count+=i;
}

//而如果我们使用公式来计算,只需执行一次即可得到结果,时间频度为T(100)=1, 即T(n)=1
count = (1+end)*end/2
复制代码

时间复杂度
在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。

大O符号
大O符号(Big O notation)是用于描述函数渐进行为的数学符号。更确切地说,它是用另一个(通常更简单的)函数来描述一个函数数量级的渐近上界。在数学中,它一般用来刻画被截断的无穷级数尤其是渐近级数的剩余项;在计算机科学中,它在分析算法复杂性的方面非常有用。

常数项可忽略

如下图, 2n+20和2n 、 3n+10和3n ,随着n值的增大,执行曲线无限接近,这时我们基本可忽略掉常数项:20、10

低次项可忽略

如下图,2n2+3n+10和2n2、n2+5n+20和n2,随着n值的增大,执行曲线无限接近,这时我们基本可以忽略掉低次项和常数项:3n+10、5n+20

系数可忽略

如下图, 3n2+2n和5n2+7n 随着n值的增大,执行曲线无限接近,这时我们基本可以忽略掉低次项:2n、5n,和系数:3、5

但是要注意的是,如果n的指数大于2时,它们的系数会对结果影响较大,如下图的 n3+5n和63+4n,这种情况则不可以忽略系数

所以我们可以把时间频度T(n)=2n2+3n+10忽略掉常数、低次项和系数,记成时间复杂度O(n2)

常见的时间复杂度
常数阶O(1)

复制代码
//无论代码执行了多少行,参数有多大,只要执行次数没有随着输入参数的变化而变化,那它的时间复杂度就是 O(1)
int i = 1;
int j = 2;
++i;
j++;
int m = i+j;
复制代码
对数阶O(log2n)

复制代码
//在while循环中,每循环一次i都会乘于2,当乘到x次时,i>n则退出循环,,所以while内的代码会执行x次,即i^x>n,又因为i每次的乘数是2即底数为2,所以它的时间复杂度是 (log2n), 如果乘数是3则是O(log3n)
int i = 1;
while(i<n){
i = i * 2;
}
复制代码
线性阶O(n)

//在for循环中,j=i会被执行n次,所以它的时间复杂度为O(n)
int j = 0;
for(int i=1; i<=n; i++){
j = i;
}
线性对数阶O(nlog2n)

复制代码
//线性对数对数阶则是将对数阶的代码再循环执行n遍,如果i的乘数为2,则时间复杂度为O(nlog2n)
for(int m=1; m<=n; m++){
int i = 1;
while(i<n){
i = i * 2;
}
}
复制代码
平方阶O(n^2)

复制代码
//平方阶则是将线性阶再循环执行n遍,记总共执行了n*n=n2,所以它的时间复杂度为O(n2)
int num = 0;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
num = i+j;
}
}
复制代码
立方阶O(n^3)

k次方阶O(n^k)

//立方阶和k次方阶参考平方阶,原理是一样的
指数阶O(2^n)

//因为时间复杂度为0(2n)的算法开销过大,不推荐使用时间复杂度为0(2n)的算法
亚马逊测评 www.yisuping.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值