试证明,对于任何 ϵ > 0 \epsilon > 0 ϵ>0 ,都有 l o g n = O ( n ϵ ) logn = O(n^\epsilon) logn=O(nϵ)
(题源:数据结构习题详解-邓俊辉第3版。原版的解答并未从理论上严格证明,直接套用了“对数函数增长很慢,在n足够大时有lnn < εn”结论,然后进一步证明。此处给出严格证明,若有谬误敬请指出)
要证明 l o g n = O ( n ϵ ) logn = O(n^\epsilon) logn=O(nϵ) ,即证明:存在常数 c c c 以及 M > 0 M > 0 M>0 ,使得当 n > M n > M n>M 时,有 l o g a n < c ∗ n ϵ log_a n < c*n^\epsilon logan<c∗nϵ 。
令 f ( x ) = c x ϵ − l o g a x , ( x > 0 ) f(x) = cx^\epsilon - log_ax, (x > 0) f(x)=cxϵ−logax,(x>0) ,则 f ′ ( x ) = c ϵ x ϵ − 1 − 1 l n a x − 1 = ( c ϵ x ϵ − 1 l n a ) x − 1 f'(x) = c\epsilon x^{\epsilon-1} - \frac{1}{lna}x^{-1} = (c\epsilon x^\epsilon-\frac{1}{lna})x^{-1} f′(x)=cϵxϵ−1−lna1x−1=(cϵxϵ−lna1)x−1
由于 ϵ > 0 \epsilon > 0 ϵ>0 , f ′ ( x ) f'(x) f′(x) 有唯一的零点,且在零点左侧函数值为负,在零点右侧函数值为正
f ′ ( x 0 ) = 0 , x 0 ϵ = 1 c ϵ l n a f'(x_0) = 0,x_0^\epsilon = \frac{1}{c\epsilon lna} f′(x0)=0,x0ϵ=cϵlna1 , f ( x ) f(x) f(x) 在定义域内先减后增,在 x 0 x_0 x0 处取最小值 f ( x 0 ) = c x 0 ϵ − ( 1 / ϵ ) l n x 0 ϵ l n a = 1 / ( ϵ l n a ) − ( l n 1 c ϵ l n a ) / ( ϵ l n a ) = ( 1 − l n 1 c ϵ l n a ) / ( ϵ l n a ) f(x_0) = cx_0^\epsilon - \frac{(1/\epsilon) lnx_0^\epsilon}{lna} = 1/(\epsilon lna)-(ln\frac{1}{c\epsilon lna})/(\epsilon lna) = (1-ln\frac{1}{c\epsilon lna})/(\epsilon lna) f(x0)=cx0ϵ−lna(1/ϵ)lnx0ϵ=1/(ϵlna)−(lncϵlna1)/(ϵlna)=(1−lncϵlna1)/(ϵlna) 。
当 f ′ ( x 0 ) > 0 f'(x_0) > 0 f′(x0)>0 ,即 1 − l n 1 c ϵ l n a > 0 , c > 1 ϵ l n a 1-ln\frac{1}{c\epsilon lna} > 0, c > \frac{1}{\epsilon lna} 1−lncϵlna1>0,c>ϵlna1 时, f ( x ) f(x) f(x) 在其定义域内恒为正。
取 c = 1 ϵ l n a + 1 c = \frac{1}{\epsilon lna} + 1 c=ϵlna1+1 ,对于 ∀ x > 0 \forall x > 0 ∀x>0 有 l o g a x < c ∗ x ϵ log_a x < c*x^\epsilon logax<c∗xϵ ,即对于任意正整数 n n n 有 l o g a n < c ∗ n ϵ log_a n < c*n^\epsilon logan<c∗nϵ ,证毕。
本题的意义在于,证明了对数复杂度对于任意幂函数复杂度都是更低阶的。