Big o f(n)=log(n)^m是所有自然数m的O(n)?
一位助教告诉我,今天这是真的,但我无法通过谷歌来验证这一点。这是说像log(n)^2,log(n)^3,log(n)^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 ∈ ℕ+ } (+) 现在,如果(++)保持不变,那么(++)中的不等式在对不等式两边应用任何单调递增
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
倾向于