f(n)= log(n)^ m对于所有自然数m?

时间:2016-04-05 17:51:56

标签: big-o

TA告诉我今天这是真的,但我无法通过谷歌搜索验证这一点。这就是说log(n)^ 2,log(n)^ 3,...,log(n)^ m等函数都是O(n)。

这是真的吗?

3 个答案:

答案 0 :(得分:2)

权利要求

  

功能function FakeScope() { } FakeScope.prototype = $rootScope; var fakeInstance = new FakeScope(); console.log(isScope(fakeInstance)) => true ,适用于任何自然数f(n) = log(n)^mm > 2)   m ∈ ℕ+

     

即。存在一组正常数O(n)c   以下是:

n0

证明

  • 假设log(n)^m < c · n, for all n > n0, { m > 2 | m ∈ ℕ+ } (+) 成立,并将此假设表示为(+)

即,给定(*),不存在正常数(*)c的集合,使得n0适用于(+)的任何值。在这个假设下,以下成立,对于所有正常数m > 2c,存在n0,使(感谢@Oriol):

n > n0

现在,如果 log(n)^m ≥ c · n, { m > 2 | m ∈ ℕ+ } (++) 成立,那么(++)中的不等式也会在对不等式的两边应用任何单调递增函数后保持不变。一个这样的函数方便地是(++)函数本身

enter image description here

因此,假设log成立,那么,对于所有正常数(++)c,存在n0以使得以下成立

n > n0

然而, log(log(n)^m) ≥ log(c · n), { m > 2 | m ∈ ℕ+ } m · log(log(n)) ≥ log(c · n), { m > 2 | m ∈ ℕ+ } (+++) 显然是一个矛盾:因为(+++)支配(w.r.t.增长)优于log(n)

enter image description here

我们可以 - 对于log(log(n))的任何给定值 - 总是找到一组常量m > 2c,以便n0(因此(+++))违反了所有(++)

因此,假设n > n0被矛盾证明是错误的,因此,(*)成立。

  

=&GT;对于(+),对于任何有限整数f(n) = log(n)^m,它保留m > 2

答案 1 :(得分:2)

是。如果函数为f(n),则表示m是参数,f不依赖于它。实际上,我们为每个f_m提供了不同的m函数。

f_m(n) = log(n)^m

然后很容易。给定m ∈ ℕ,请重复使用L'Hôpital's rule

        f_m(n)            log(n)^m            m * log(n)^(m-1)
limsup ──────── = limsup ────────── = limsup ────────────────── =
 n→∞      n        n→∞       n         n→∞           n

          m*(m-1) * log(n)^(m-2)                m!
= limsup ──────────────────────── = … = limsup ──── = 0
                 n                       n→∞    n

因此,f_m ∈ O(n)

当然,如果我们有f(m,n) = log(n)^m,情况会有所不同。例如,取m=n

        f(n,n)            log(n)^n
limsup ──────── = limsup ────────── = ∞
 n→∞      n        n→∞       n

然后f ∉ O(n)

答案 2 :(得分:0)

在许多方面,对于任何正整数m我们都更直观:

x^m = O(e^x)

这表明指数增长主导多项式增长(这就是为什么指数时间算法在计算机编程中是个坏消息)。

假设这是真的,只需采用x = log(n)并使用x趋于无穷大的事实,当且仅当n趋于无穷大且e^xlog(x)是反转的:

log(n)^m = O(e^log(n)) = O(n)

最后,因为对于任何自然数m,根函数n => n^(1/m)正在增加,我们可以将结果重写为

log(n) = O(n^(1/m))

这种写作方式表明log(n)n的任何根(正方形,立方体等)增长得慢,这显然对应e^n比任何力量增长更快n

点击编辑:上面显示log(n)^m = O(n)来自更熟悉的x^m = O(e^x)。要将它转换为更加独立的证明,我们可以稍微直接显示后者。

e^x

的泰勒系列开始
e^x = 1 + x/1! + x^2/2! + x^3/3! + ... + x^n/n! + ...

众所周知,会聚所有实数x。如果给出正整数m,请设K = (m+1)!。然后,如果x > K我们有1/x < 1/(m+1)!,那么

x^m = x^(m+1)/x < x^(m+1)/(m+1)! < e^x

暗示x^m = O(e^x)。 (上面的最后一个不等式是正确的,因为如果e^xx>0只是其中一个术语,x^(m+1)/(m+1)!扩展中的所有术语都是严格肯定的。)