Big o f(n)=O(g(n))或g(n)=O(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的定义

我试图证明这对于任何函数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的所有值,都不存在满足这个不等式的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))。

这个问题不是关于代码的。我相信它适用于理论计算机科学姐妹网站,很好地解释了示例功能和可视化。