Big o f(n)=log(n)^m是所有自然数m的O(n)?

Big o f(n)=log(n)^m是所有自然数m的O(n)?,big-o,Big O,一位助教告诉我,今天这是真的,但我无法通过谷歌来验证这一点。这是说像log(n)^2,log(n)^3,log(n)^m都是O(n) 这是真的吗 函数f(n)=log(n)^m,用于任何自然数m>2(m∈ ℕ+)在中 O(n) 即存在一组正常数c和n0,从而 以下观点认为: log(n)^m < c · n, for all n > n0, { m > 2 | m ∈ ℕ+ } (+) 现在,如果(++)保持不变,那么(++)中的不等式在对不等式两边应用任何单调递增

一位助教告诉我,今天这是真的,但我无法通过谷歌来验证这一点。这是说像log(n)^2,log(n)^3,log(n)^m都是O(n)

这是真的吗

函数
f(n)=log(n)^m
,用于任何自然数
m>2
m∈ ℕ+)在中
O(n)

即存在一组正常数
c
n0
,从而 以下观点认为:

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

因此,在假设
(++)
成立的情况下,对于所有正常数
c
n0
,存在一个
n>n0
,如下所示成立

然而,
(+++)
显然是一个矛盾:因为
log(n)
主导着(w.r.t.增长)而不是
log(n))

对于
m>2
的任何给定值,我们都可以找到一组常量
c
n0
,这样所有
n
(+++)
(因此
(+++)
)都会被违反

因此,
(*)
假设被矛盾证明是错误的,因此,
(+)
成立

=>对于
f(n)=log(n)^m
,对于任何有限整数
m>2
,它认为
f∈ O(n)

索赔

函数
f(n)=log(n)^m
,用于任何自然数
m>2
m∈ ℕ+)在中
O(n)

即存在一组正常数
c
n0
,从而 以下观点认为:

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

因此,在假设
(++)
成立的情况下,对于所有正常数
c
n0
,存在一个
n>n0
,如下所示成立

然而,
(+++)
显然是一个矛盾:因为
log(n)
主导着(w.r.t.增长)而不是
log(n))

对于
m>2
的任何给定值,我们都可以找到一组常量
c
n0
,这样所有
n
(+++)
(因此
(+++)
)都会被违反

因此,
(*)
假设被矛盾证明是错误的,因此,
(+)
成立

=>对于
f(n)=log(n)^m
,对于任何有限整数
m>2
,它认为
f∈ O(n)


对。如果函数是
f(n)
,则表示
m
是一个参数,
f
不依赖于它。事实上,每个
m
都有一个不同的
fum
函数

f_m(n) = log(n)^m
那就容易了。给定
m∈ ℕ,重复使用

        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)

是。如果函数是
f(n)
,则表示
m
是一个参数,
f
不依赖于它。事实上,每个
m
都有一个不同的
fum
函数

f_m(n) = log(n)^m
那就容易了。给定
m∈ ℕ,重复使用

        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)

在许多方面,对于任何正整数
m
我们有:

x^m = O(e^x)
这说明指数增长主导了多项式增长(这就是为什么指数时间算法在计算机编程中是个坏消息)

假设这是真的,只需取
x=log(n)
并使用这样一个事实,即
x
趋于无穷当且仅当
n
趋于无穷大,并且
e^x
log(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=x^(m+1)/x

这意味着
x^m=O(e^x)
。(上面的最后一个不等式是正确的,因为如果
x>0
x^(m+1)/(m+1)!
只是这些术语之一,
e^x
展开式中的所有术语都是严格正的。

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

x^m = O(e^x)
这说明指数增长主导了多项式增长(这就是为什么指数时间算法在计算机编程中是个坏消息)

假设这是真的,只需取
x=log(n)
并使用
x
倾向于