Big o f(n)=O(g(n))或g(n)=O(f(n))
我试图证明这对于任何函数f和g,以及域和共域N都是正确的。我已经看到它被证明是使用极限的,但显然你也可以证明它没有极限 本质上,我试图证明的是“如果f(n)没有g(n)的大O,那么g(n)必须有f(n)的大O”。我遇到的困难是试图理解“f没有g的大O”的意思 根据big-O的形式定义,如果f(n)=O(g(n))那么n>=n->f(n)不是真的。如果Big o f(n)=O(g(n))或g(n)=O(f(n)),big-o,Big O,我试图证明这对于任何函数f和g,以及域和共域N都是正确的。我已经看到它被证明是使用极限的,但显然你也可以证明它没有极限 本质上,我试图证明的是“如果f(n)没有g(n)的大O,那么g(n)必须有f(n)的大O”。我遇到的困难是试图理解“f没有g的大O”的意思 根据big-O的形式定义,如果f(n)=O(g(n))那么n>=n->f(n)不是真的。如果n是奇数,否则为零,如果n是偶数,否则为零 如果说f是O(g)就意味着存在一个常数C>0和N>0,因此N>N意味着f(N)首先,你对big-O的定义
n
是奇数,否则为零,如果n
是偶数,否则为零
如果说
f
是O(g)
就意味着存在一个常数C>0
和N>0
,因此N>N
意味着f(N)首先,你对big-O的定义有点偏离。你说:
我认为这意味着对于n的所有值,都不存在满足这个不等式的c
实际上,您需要选择一个值c
,该值满足n
的any值的不等式
无论如何,要回答这个问题:
我不相信问题中的陈述是正确的……让我们看看是否能想出一个反例,其中f(n)≠ O(g(n))和g(n)≠ O(f(n))
注意:我将交替使用n
和x
,因为这样更容易思考。
我们必须想出两个函数,它们在走向无穷大时不断相互交叉。不仅如此,它们还必须继续相互交叉,而不管我们将它们乘以常数c
因此,我认为函数必须在两种不同的时间复杂度之间交替
让我们看一个在y=x
和y=x^2
之间交替的函数:
f(x) = .2 (x * sin(x) + x^2 * (1 - sin(x)) )
现在,如果我们创建一个具有轻微偏移振荡的类似函数:
g(x) = .2 (x * cos(x) + x^2 * (1 - cos(x)) )
然后,这两个函数将继续相互交叉,直至无穷远
对于您选择的任何数字N
,无论多高,都会有一个x1
大于N
,这样f(x)=x^2
和g(x)=x
。同样,也会有x2
这样的g(x)=x^2
和f(x)=x
此时,您将无法选择任何c1
或c2
来确保f(x)
或g(x)
总之,f(n)≠ O(g(n))并不意味着g(n)=O(f(n))。这个问题不是关于代码的。我相信它适用于理论计算机科学姐妹网站,很好地解释了示例功能和可视化。