我试图证明这对于任何具有域和共域N的函数f和g是正确的。我已经看到它使用限制证明了它,但显然你也可以在没有它们的情况下证明它。
基本上我试图证明的是"如果f(n)没有g(n)的大O,那么g(n)必须有一个大的O F(N)。我遇到麻烦的是试图理解什么" f没有g"手段。
根据big-O的形式定义,如果f(n)= O(g(n))则n> = N - >对于一些N和常数c,f(n)< = cg(n)。如果f(n)!= O(g(n))我认为这意味着没有c能够满足n的所有值的这个不等式。然而,我不知道如何利用这一事实来证明g(n)= O(f(n))。这并不能证明c'存在g(n)< = c' f(n),这将成功证明这个问题。
答案 0 :(得分:5)
首先,你对big-O的定义是 little bitt off。你说:
我认为这意味着没有c能够满足n的所有值的这种不等式。
实际上,您需要选择一个值c
,以实现n
的任何值的不等式。
我不相信问题中的陈述是真的......让我们看看我们是否可以想到一个反例,其中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) < c1 * g(x)
或g(x) < c2 * f(x)
。
总之,f(n)≠O(g(n))并不意味着g(n)= O(f(n))。
答案 1 :(得分:4)
不正确。如果f(n) = 1
为奇数,则n
为零,否则为{0},如果g(n) = 1
为偶数则为n
,否则为零。
要说f
为O(g)
会说C > 0
和N > 0
为常数,n > N
暗示f(n) <= C g(n)
。设n = 2 * N + 1
,以便n
为奇数。然后f(n) = 1
但g(n) = 0
,以便f(n) <= C * g(n)
是不可能的。因此,f
O(g)
不是真的。
同样,我们可以证明g
O(f)
不是真的。