f(n)= O(g(n))或g(n)= O(f(n))

时间:2013-06-30 15:45:47

标签: big-o

我试图证明这对于任何具有域和共域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),这将成功证明这个问题。

2 个答案:

答案 0 :(得分:5)

首先,你对big-O的定义是 little bitt off。你说:

  

我认为这意味着没有c能够满足n的所有值的这种不等式。

实际上,您需要选择一个值c,以实现n任何值的不等式。

无论如何,要回答这个问题:

我不相信问题中的陈述是真的......让我们看看我们是否可以想到一个反例,其中f(n)≠O(g(n))和g(n)≠O (F(N))。

注意:我将交替使用nx,因为我更容易这样思考。

我们必须提出两个功能,当它们走向无限时,它们会不断相互交叉。不仅如此,他们还必须继续相互交叉,无论我们是多少的常数c

这让我觉得这些功能必须在两种不同的时间复杂性之间交替。

让我们看一下在y = xy = x^2之间交替的函数:

f(x) = .2 (x * sin(x) + x^2 * (1 - sin(x)) )

Graph 1

现在,如果我们创建一个具有轻微偏移振荡的类似函数:

g(x) = .2 (x * cos(x) + x^2 * (1 - cos(x)) )

然后这两个函数将继续将彼此的路径交叉到无穷大。

对于您选择的任何数字N,无论多高,都会x1大于Nf(x) = x^2g(x) = x。同样,x2g(x) = x^2会有f(x) = x

在这些点上,您将无法选择任何c1c2来确保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,否则为零。

要说fO(g)会说C > 0N > 0为常数,n > N暗示f(n) <= C g(n)。设n = 2 * N + 1,以便n为奇数。然后f(n) = 1g(n) = 0,以便f(n) <= C * g(n)是不可能的。因此,f O(g)不是真的。

同样,我们可以证明g O(f)不是真的。