给定两个函数,一个函数是另一个函数的big-O吗?

时间:2011-09-05 08:42:42

标签: big-o

我的问题是指算法分析中的大哦符号。虽然Big-Oh似乎是一个数学问题,但它在算法分析中非常有用。

假设下面定义了两个函数:

    当n是偶数时,
  • f(n)= 2(对于幂n) 当li为奇数时,
  • f(n)= n
  • 当n是偶数时,
  • g(n)= n 当n为奇数时,
  • g(n)= 2(对于幂n)。

对于上述两个功能,其中一个是其他的大哦?或者是否任何函数不是另一个函数的Big-Oh。

谢谢!

3 个答案:

答案 0 :(得分:3)

在这种情况下,

  • f∉O(g)和
  • g∉O(f)。

这是因为无论您选择 N k 的常数,

  • 存在 i N ,使得f(i)> k g(i)和
  • 存在 j N ,使得g(j)> k f(j)。

答案 1 :(得分:0)

Big-Oh关系非常具体,因为在有限n之后,一个函数总是比另一个函数大。

这是真的吗?如果是这样,请提供n。如果没有,你应该证明它。

答案 2 :(得分:0)

通常Big-O and Big-Theta符号会混淆。

外行人尝试定义可能是Big-O意味着一个函数正在快速或更快地增长,即给定足够大的n,f(n)<=k*g(n)其中k是不变的。这意味着如果f(x)= 2x ^ 3,则它在O(x ^ 3),O(x ^ 4),O(2 ^ x),O(x!)等中。

Big-Theta意味着一个函数与另一个函数一样快增长,没有一个能够“超长”另一个函数,或者k1*g(n)<=f(n)<=k2*g(n)用于某些k1和k2。在编程术语中,这意味着这两个函数具有相同的复杂程度。如果f(x)= 2x ^ 3,那么它在Θ(x ^ 3)中,例如,如果k1 = 1,并且k2 = 3,1*x^3 < 2*x^3 < 3*x^3

根据我的经验,当程序员谈论Big-O时,讨论实际上是关于Big-Θ,因为我们更关心的是一样快,而不是不比部分快。

也就是说,如果组合了两个具有不同Θ的函数,如在您的示例中,较大的函数 - (Θ(2 ^ n) - 吞下较小的 - Θ(n),因此f和{ {1}}具有完全相同的Big-O和Big-Θ复杂性。在这种情况下,它是正确的

g

所以,因为它们具有相同的复杂性,它们是O和Θ彼此约束。