关于『小知识点』:时间、空间复杂度
关于『小知识点』:时间、空间复杂度
建议缩放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
Big−O 表示法
推导时间复杂度有如下几个原则:
- 如果运行时间是常数量级,用常数1表示
- 只保留时间函数中的最高阶项
- 如果最高阶项存在,则省去最高阶项前面的系数
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)=a∗T(N/b)+O(Nd)
- 当 log b a > d \log_ba > d logba>d 复杂度为 O ( N log b a ) O\left(N^{\log_ba}\right) O(Nlogba)
- 当 log b a < d \log_ba < d logba<d 复杂度为 O ( N d ) O\left(N^d\right) O(Nd)
- 当 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中……)