我的问题是指算法分析中的大哦符号。虽然Big-Oh似乎是一个数学问题,但它在算法分析中非常有用。
假设下面定义了两个函数:
对于上述两个功能,其中一个是其他的大哦?或者是否任何函数不是另一个函数的Big-Oh。
谢谢!
答案 0 :(得分:3)
在这种情况下,
这是因为无论您选择 N 和 k 的常数,
答案 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和Θ彼此约束。