这些函数的大 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!)
如果主导部分是阶乘
- 等等...
我正在学习算法复杂度,我只是想验证我的理解是否正确。
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!)
如果主导部分是阶乘- 等等...