问题描述
为什么 Big-O 表示法不能比较同一复杂度类中的算法。请解释一下,我找不到任何详细的解释。
解决方法
因此,O(n^2)
表示此算法需要更少或相等 数量的操作来执行。因此,当您有需要 A
操作的算法 f(n) = 1000n^2 + 2000n + 3000
和需要 B
操作的算法 g(n) = n^2 + 10^20
时。他们都是O(n^2)
对于较小的 n
,第一个算法的性能将优于第二个。对于大n
,第二个算法看起来更好,因为它有1 * n^2
,但第一个有1000 * n^2
。
此外,h(n) = n
也是 O(n^2)
,而 k(n) = 5
是 O(n^2)
。所以,我可以说 k(n)
比 h(n)
更好,因为我知道这些函数的样子。
考虑我不知道函数 k(n)
和 h(n)
是什么样子的情况。我唯一得到的是k(n) ~ O(n^2),h(n) ~ O(n^2)
。我能说哪个功能更好吗?号
总结
你不能说哪个函数更好,因为大 O 符号保持小于或等于。以下内容属实
O(1) is O(n^2)
O(n) is O(n^2)
如何比较函数?
有一个大欧米茄符号表示大于或等于,例如f(n) = n^2 + n + 1
,这个函数是Omega(n^2)
和Omega(n)
和Omega(1)
.当函数的复杂度等于某个渐近时,使用 Big Theta,因此对于上面描述的 f(n)
我们可以说:
f(n) is O(n^3)
f(n) is O(n^2)
f(n) is Omega(n^2)
f(n) is Omega(n)
f(n) is Theta(n^2) // this is only one way we can describe f(n) using theta notation
因此,要比较函数的渐近性,您需要使用 Theta 而不是 Big O 或 Omega。