这些函数的大 O 复杂度是否正确?

Is the big-O complexity of these functions correct?

我正在学习算法复杂度,我只是想验证我的理解是否正确。

1) T(n) = 2n + 1 = O(n)

这是因为我们去掉了常量 2 和 1,只剩下 n。因此,我们有 O(n).

2) T(n) = n * n - 100 = O(n^2)

这是因为我们去掉了常量-100,剩下n * n,也就是n^2。因此,我们有 O(n^2)

我说的对吗?

基本上,这些不同的级别由函数的 "dominant" 因素决定,从最低复杂度开始:

  • O(1) 如果你的函数只包含常量
  • O(log(n)) 如果显性部分在对数中,ln...
  • O(n^p) 如果主导部分是多项式并且最高幂是 p(例如 O(n^3) for T(n) = n*(3n^2 + 1) -3
  • O(p^n)如果占优部分是固定数的n次方(例如O(3^n) for T(n) = 3 + n^99 + 2*3^n
  • O(n!) 如果主导部分是阶乘
  • 等等...