1,渐进时间复杂度
T(n)=O(F(n))
F(n)表示解决问题的函数,T(n)表示函数F(n)的增长率
表示随问题规模n的增加,算法执行时间增长率与F(n)的增长率相同
2,时间算法类型
多项式时间算法:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)
指数时间算法:O(2ⁿ)<O(n!)<O(nⁿ)
3,时间复杂度具体分析
假定每条语句执行时间为单位时间,时间复杂度是所有语句重复执行次数之和
eg:
def complexity(n,a,b,c): #这里执行代码时间复杂度为O(1)
for i in range(n):#这行代码时间复杂度为O(n+1)
#这里执行代码时间复杂度为O(n)
for j in range(n):#这行代码时间复杂度为O(n*(n+1))
#这里执行代码时间复杂度为O(n*n) a[i][j]=0
for k in range(n):#这行代码时间复杂度为O(n*n*(n+1))
#这里执行代码时间复杂度为O(n*n*n) a[i][j]=b[i][j]*c[i][j]
加和得:T(n)=2n*n*n+3n*n+2n+1
但实际分析中并不考虑这么复杂,只考虑最内层嵌套循环的时间复杂度也就是O(n*n*n)
4,时间复杂度的乘法规则
T(n,m)=T1(n)*T2(m)=O(f(n)*g(m))
eg.
for i in range(n): for j in range(i,n): if a[i]>a[j]: a[j],a[i]=a[i],a[j]
第二层for循环共执行n次,每次其内部时间复杂度各不相同,全部加和如下:
(n)+(n-1)+(n-2)+(n-3)+...+2+1=(n+1)/2*n
时间复杂度为O(n²)
5,时间复杂度的加法规则
T(n,m)=T1(n)+T2(m)=O(max(f(n),g(m)))
就是两个并列函数(同一层级)选取一个最耗费性能的作为时间复杂度
7,空间复杂度(待更)