是否总是可以找到一个常数K来证明是大O还是大Omega?

时间:2018-10-14 01:03:10

标签: algorithm big-o

所以我必须确定n ^(1/2)是否为log(n)^ 3的Big Omega。我很确定不是这样,因为n ^(1/2)甚至不在log(n)^ 3的范围内;但我不知道如何无限制地证明这一点。我知道没有限制的定义是

  

g(n)是f(n)的大欧米茄,如果存在常数c> 0并且   整数常数n0 => 1,使得f(n)=> c g(n)为n => n0

但是我真的可以总找到一个常数c来满足这个要求吗?

例如,对于log(n)^ 3 => c * n ^(1/2),如果c = 0.1且n = 10,则得到1 => 0.316。

1 个答案:

答案 0 :(得分:1)

sqrt(n)ln(n)^3进行比较时会发生什么情况

ln(n)^3 <= sqrt(n)                         ; for all n >= N0

我怎么知道? 因为我打印了足够多的两种表达方式的样本,以说服自己主导了另一种表达方式。

要更正式地看待这一点,我们首先假设我们已经找到N0(稍后再做),然后通过归纳证明如果n >= N0的不等式成立,那么它也会成立为n+1

请注意,为简单起见,我在基础ln中使用e

等效地,我们必须证明

ln(n + 1) <= (n + 1)^(1/6)

现在

ln(n + 1) = ln(n + 1) - ln(n) + ln(n)
          = ln(1 + 1/n) + ln(n)
         <= ln(1 + 1/n) + n^(1/6)          ; inductive hypethesis

根据e的定义,我们知道

        e = limit (1 + 1/n)^n

取对数

        1 = limit n*ln(1 + 1/n)

因此,存在N0这样的出口

        n*ln(1 + 1/n) <= 2                 ; for all n >= N0

如此

        ln(1 + 1/n) <= 2/n
                    <= 1

使用以上内容,我们得到

        ln(n + 1) <= 1 + n^(1/6)
                  <= (n+1)^(1/6)

我们想要的。

我们现在剩下的任务是找到一些N0,这样

ln(N0) <= N0^(1/6)

N0 = e^(6k)取一些我们将要找到的k的值。我们得到

ln(N0) = 6k
N0^(1/6) = e^k

因此,我们只需要选择k,使6k < e^k成为可能,这是因为右侧的增长快于左侧。