Skip to content

Latest commit

 

History

History
40 lines (28 loc) · 1.57 KB

1.complexity.md

File metadata and controls

40 lines (28 loc) · 1.57 KB

复杂度

一般从以下维度来评估算法的优劣

  • 正确性、可读性、健壮性(对不合理输入的反应能力和处理能力)
  • 时间复杂度 (time complexity ):估算程序指令的执行次数(执行时间)
  • 空间复杂度 (space complexity ):估算所需占用的存储空间

大O表示法 (Big O)

一般用大O表示法来描述复杂度 ,它表示的是数据规模 n 对应的复杂度。

计算出一个程序的时间复杂度后,也就是它执行的次数,然后将常数,系数,低阶都忽略,剩下的就是它的大O表示法的时间复杂度。

  • 9 O(1)
  • 2n + 3 O(n)
  • n^2 + 2n + 6 O(n^2)
  • 4n^3 + 3n^2 + 22n + 100 O(n^3)

其中要注意对数的计算,因为对数符合下面的公式:

log2(n) = log2(9) log9(n)

一个以 2 为底 n 的对数可以转换成 以 2 为底 m 的对数 乘以 以 m 为底 n 的对数(m 是一个常数),因此,上面例子中 log2(9) 是常数可以省略,而底可以互相转换,所以对数在大O表示法中将底数省略,一律表示成 O(log(n))。

常见的复杂度

执行次数 复杂度 非正式术语
12 O(1) 常数阶
2n + 3 O(n) 线性阶
4n^2 + 2n + 6 O(n^2) 平方阶
4log2(n) + 25 O(log(n)) 对数阶
3n + 2nlog3(n) + 15 O(nlog(n)) nlogn阶
4n^3 + 3n^2 + 22n + 100 O(n^3) 立方阶
2^n O(2^n) 指数阶

O(1) < O(log(n)) < O(n) < O(nlog(n)) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)