【问题标题】:Explanation for Big-O notation comparison in different complexity class不同复杂度类中 Big-O 符号比较的说明
【发布时间】:2021-06-14 08:55:44
【问题描述】:

为什么 Big-O 表示法不能比较相同复杂度等级的算法。请解释一下,我找不到任何详细的解释。

【问题讨论】:

  • 如果您只知道f(n) = O(n²)g(n) = O(n²),那并不能告诉您f(n)g(n) 哪个更大,是吗?
  • 你能解释一下吗。
  • 要比较同一复杂度类中的算法,您需要知道确切复杂度,即与其关联的所有常量。没有这个,比较就没有意义了!

标签: algorithm big-o computer-science


【解决方案1】:

所以,O(n^2) 表示该算法需要 更少或等于 次操作才能执行。所以,当你有算法A 需要f(n) = 1000n^2 + 2000n + 3000 操作和算法B 需要g(n) = n^2 + 10^20 操作。他们都是O(n^2)

对于小的n,第一个算法将比第二个算法执行得更好。对于大ns,第二个算法看起来更好,因为它有1 * n^2,但第一个有1000 * n^2

另外,h(n) = n 也是 O(n^2)k(n) = 5O(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)

如何比较函数?

有一个 Big Omega 表示法保持大于或等于,例如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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多