二、时间复杂度
1.时间复杂度:
1)一般情况下,算法中的基本操作语句的重复执行次数是时间规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋于无穷大时,T(n)/f(n)的极限值是一个不等于0的常数,则称f(n)是T(n)的同量级函数,记做T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。
2)T(n)不同,但时间复杂度可能相同,如T(n)=n2+7n+6与T(n)=3n2+2n+2,他们的T(n)不同,但时间复杂度相同,都为O(f(n))。
3)计算时间复杂度的方法
√ 常用常数1代替运行时间中的加法常数 如 T(n)=n2+7n+6==> T(n)=n2+7n+1
√ 修改后的运行次数函数中,只保留最高阶项 T(n)=n2+7n+1==> T(n)=n2
√ 去除最高阶项的系数 T(n)=n2==> T(n)=n2==>O(n2)
2.常见的时间复杂度:
1)无循环条件下常数阶 O(1) 最稳定
2)对数阶 如O(log2n)
3)线性阶 O(n)
4)线性对数阶 O(nlog2n) —线性阶*对数阶
5)平方阶 O(n2) 线性阶*线性阶 两层n循环
6)立方阶 O(n3) 三层n循环
7)k次方阶 O(nk)
8)指数阶 O(2n) 执行慢(指数爆炸)
说明:
○常见的时间算法时间复杂度从(1)到(8)越来越复杂,随着n的增大,时间复杂度不断增大,算法的执行效率越来越低(O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2) <O(n3) <O(nk)<O(2n)<O(n)!<O(nn))—简单记法:长对幂指阶
○我们应该尽可能避免(8)指数阶的算法
3.时间复杂度的规则
1)加法规则 T(n)=T1(n)+T2(n)=O(f(n)+O(g(n)=O(max(O(f(n),O(g(n)) 多项式相加,只保留最高的阶,且系数变为1
2)乘法规则 T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n)) 多项相乘,都保留
三、平均时间复杂度与最坏时间复杂度
1)平均时间复杂度是指所有有可能的输入实例均以等概率出现的情况下,该算法的运行时间
2)最坏情况下的时间复杂度是在算法在任何输入实例上运行的界限,就保证了算法的运行时间 不会比最坏情况更长
4、总结:
a)、通过时间复杂度我们就可以计算出我们的代码效率如何,在后期代码优化上起到证明的作用。
下篇内容:
程序员数学基础【三、取模运算(取余运算功能重叠部分)】(Python版本)
【https://blog.csdn.net/feng8403000/article/details/114194267】
万丈高楼平地起,程序员数学基础,从小学的【什么是数学】至【离散数学】(主要是图论)咱们一步步成长,共同加油。