时间复杂度和空间复杂度

  • 时间复杂度:是指执行当前算法所消耗的时间。

  • 空间复杂度:是指执行当前算法需要占用多少内存空间。

作用:

​ 衡量一个算法的优劣性,有些时候需要在二者之间权衡,进行取舍,寻找二者的平衡点。

时间复杂度计算:

​ 大O表示法:T(n) = O(f(n)) ,其中f(n) 表示每行代码执行次数之和 。

eg:

events = pygame.event.get()   #执行一次
for event in events: #执行一次
if event.type in (QUIT,KEYDOWN):  #执行N次
       sys.exit()

​ 执行的总次数f(n)=n+2 n逐渐变大后,n+2就近似于n, 所以T(n) = O(f(n))=O(n)

时间复杂度量级 :

​ 从上到下复杂度逐渐变大

  • 常数阶O(1)

  • 对数阶O(logN)

  • 线性阶O(n)

  • 线性对数阶O(nlogN)

  • 平方阶O(n²)

  • 立方阶O(n³)

  • K次方阶O(n^k)【n的k次方,符号不会敲】

  • 指数阶(2^n)

常数阶O(1)

​ 代码只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1)

对数阶O(logN)

i=1
while i<n:  #执行x次后,i>n,结束循环,i=(i*2)^x,i初始为1,所以i=2^x,我们将最终的i近似于n,就有 x=log2n[公式敲不出来]
   i*=2  
线性对数阶O(nlogN)

​ 将对数阶O(logN)执行n遍,就是线性对数阶O(nlogN)

平方阶O(n²)

​ 果把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²) 了。

空间复杂度

​ 对一个算法在运行过程中临时占用存储空间大小的一个量度 。

​ 空间复杂度比较常用的有:O(1)、O(n)、O(n²)

​ 算法执行所需要的临时空间不随着某个变量n的大小而变化 ,空间复杂度 S(n) = O(1)

空间复杂度其实在这里更多的是说一下这个概念,因为当今硬件的存储量级比较大,一般不会为了稍微减少一点儿空间复杂度而大动干戈,更多的是去想怎么优化算法的时间复杂度。

所以我们在日常写代码的时候就衍生出了用「空间换时间」的做法,并且成为常态

12-30 23:27