数据结构与算法(一):时间与空间复杂度

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)))

就是两个并列函数(同一层级)选取一个最耗费性能的作为时间复杂度

6,二分查找时间复杂度见 数据结构与算法(二)

7,空间复杂度(待更)

可以直接留言交流问题或想法,每天都会看
原文地址:https://www.cnblogs.com/shitianfang/p/12390122.html