关于『小知识点』:时间、空间复杂度

 

关于『小知识点』:时间、空间复杂度

 

建议缩放90%食用

 

奇怪的知识又增加了呢~

废话 return 0;

时间还是空间?这是一个问题。


Q1: \text{Q1:} Q1: 怎么分析时间复杂度

A: \text{A:} A:

渐进时间复杂度(asymptotic time complexity)

官方定义:若存在函数 f ( n ) f(n) f(n),使得当 n n n 趋近于无穷大时, T ( n ) / f ( n ) T(n)/f(n) T(n)/f(n) 的极限值为不等于零的常数,则称 f ( n ) f(n) f(n) T ( n ) T(n) T(n) 的同数量级函数

记作 T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n)),称 O ( f ( n ) ) O(f(n)) O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度


  (人话解释) 随问题规模n的增大,算法的执行时间增长率和 f ( n ) f(n) f(n) 增长率成正比,这称作算法的渐进时间复杂度。渐进时间复杂度用大写 O O O 来表示,所以也被称为 B i g − O Big-O BigO 表示法


推导时间复杂度有如下几个原则:

  1. 如果运行时间是常数量级,用常数1表示
  2. 只保留时间函数中的最高阶项
  3. 如果最高阶项存在,则省去最高阶项前面的系数

e.g.

NO.1

T ( n ) = 3 n T(n) = 3n T(n)=3n


最高阶项为 3 n 3n 3n ,省去系数 3 3 3 ,转化的时间复杂度为:


T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n)


— — — — — —
NO.2

T ( n ) = 5 log ⁡ n T(n) = 5\log n T(n)=5logn


最高阶项为 5 log ⁡ n 5\log n 5logn,省去系数 5 5 5 ,转化的时间复杂度为:


T ( n ) = O ( log ⁡ n ) T(n) = O(\log n) T(n)=O(logn)


— — — — — —

NO.3

T ( n ) = 2 T(n) = 2 T(n)=2


T ( n ) T(n) T(n) 只有常数量级,转化的时间复杂度为:


T ( n ) = O ( 1 ) T(n) = O(1) T(n)=O(1)


— — — — — —

NO.4

T ( n ) = 0.5 n 2 + 0.5 n T(n)= 0.5n^2 + 0.5n T(n)=0.5n2+0.5n


最高阶项为0.5n^2,省去系数0.5,转化的时间复杂度为:


T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)



敲黑板 · 一个奇怪的小知识

剖析递归行为和递归行为时间复杂度的估算

master 公式的使用

T ( N ) = a ∗ T ( N / b ) + O ( N d ) T(N) = a*T(N/b) + O(N^d) T(N)=aT(N/b)+O(Nd)

  1. log ⁡ ⁡ b a > d \log⁡_ba > d logba>d 复杂度为 O ( N log ⁡ b a ) O\left(N^{\log_ba}\right) O(Nlogba)
  2. log ⁡ b a < d \log_ba < d logba<d 复杂度为 O ( N d ) O\left(N^d\right) O(Nd)
  3. log ⁡ b a = d \log_ba = d logba=d 复杂度为 O ( N d × log ⁡ N ) O\left(N^d\times{\log{N}}\right) O(Nd×logN)


注: a a a 为将数据分成几块, b b b 为每块数据占用总数据的数据量, O ( N d ) O(N^d) O(Nd) 为每次迭代的时间复杂度,然后计算 d d d 的值





Q2: \text{Q2:} Q2: 怎么分析空间复杂度

A: \text{A:} A:

  空间复杂度: 算法的空间复杂度并不是实际占用的空间,而是计算整个算法空间辅助空间单元的个数,与问题的规模没有关系。算法的空间复杂度 S ( n ) S(n) S(n) 定义为该算法所耗费空间的数量级。


  记作 S ( n ) = O ( f ( n ) ) S(n)=O(f(n)) S(n)=O(f(n))


  若算法执行所需要的辅助空间相对于输入数据 n n n 而言是一个常数,则称这个算法空间复杂度辅助空间为 O ( 1 ) O(1) O(1)


  递归算法空间复杂度:空间复杂度 = 递归深度 * 每次递归所要的辅助空间,如果每次递归所需要的辅助空间为常数,则递归空间复杂度 O ( n ) O(n) O(n)





关于『小知识点』:时间、空间复杂度结束了,你学废了吗~

Bye bye!!1 👋👋

(持续WATER中……)

posted @ 2022-05-16 22:21  北柒kylin  阅读(68)  评论(0编辑  收藏  举报