算法的时间复杂度和空间复杂度:从耗费的时间资源和空间资源角度衡量不同算法的优劣。
时间复杂度好算,但空间复杂度感觉和编程语言的内置函数有关,由于对函数不了解导致很多时候并不清楚是否开辟了新的内存空间。
时间复杂度
算法花费的时间与算法中语句的执行次数成正比例。
lim n → ∞ T ( n ) f ( n ) = c \lim _{n \rightarrow ∞} \frac{T(n)}{f(n)}=c limn→∞f(n)T(n)=c,c为常数。
问题规模为n时,算法中语句执行次数记为时间频度 T ( n ) T(n) T(n)。时间复杂度定义为时间频度的等阶函数 f ( n ) f(n) f(n)的量级 O ( f ( n ) ) O(f(n)) O(f(n))。
常见的时间复杂度量级:
项目 Value 常数阶 O ( 1 ) O(1) O(1) 对数阶 O ( log N ) O( \log \mathrm{N} ) O(logN) 线性阶 O ( n ) O(n) O(n) 线性对数阶 O ( n l o g N ) O(nlogN) O(nlogN) 平方阶 O ( n 2 ) O\left(n^{2}\right) O(n2) 立方阶 O ( n 3 ) O\left(n^{3}\right) O(n3) K \mathrm{K} K 次方阶 O ( n k ) \mathrm{O}\left(\mathrm{n}^{\mathrm{k}}\right) O(nk) 指数阶 O ( 2 n ) O\left(2^{n}\right) O(2n)
空间复杂度
算法的空间复杂度(Space Complexity)-
S
(
n
)
S(n)
S(n)-定义为该算法所耗费的存储空间。
算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)。
常数空间:O(1)
多开一个辅助的数组:O(N)
多开一个辅助的二维数组:O(N^2)
对于递归调用:递归深度=空间复杂度