【发布时间】:2017-02-20 07:08:40
【问题描述】:
一般来说,以下是否总是正确的?
log(n) = O(na/(a+1))?英石。 a 是任何常数正整数,可能非常大。
如果不是,a 的最大值是多少,这句话将成立?
【问题讨论】:
标签: algorithm math time-complexity big-o logarithm
一般来说,以下是否总是正确的?
log(n) = O(na/(a+1))?英石。 a 是任何常数正整数,可能非常大。
如果不是,a 的最大值是多少,这句话将成立?
【问题讨论】:
标签: algorithm math time-complexity big-o logarithm
随着函数的发展,log(n) 总是比 nany power 增长慢 n 变大。证明见https://math.stackexchange.com/questions/1663818/does-the-logarithm-function-grow-slower-than-any-polynomial。
所以只要 a 是一个常数正整数,它的值是多少并不重要,因为总是可以找到常数 C 和k 使得 log(n) C(na em>/(a+1)| + k,就是big-O的定义。
不过,你也可以直观的理解:na/(a+1 ) 在 a 变大时接近 n。自然,log(n) 总是 O(n)。
【讨论】:
基本事实是,由于对数的凹度,它总是低于它的切线。所以
log(x) <= log(e) + 1/e * (x-e) = x/e
这样
log(n) = O(n).
现在只需要应用对数定律来找到
log(n) = 1/c * log(n^c) <= 1/(ce) * n^c
因此log(n)=O(n^c) 表示任何积极的C。
【讨论】:
如果您的意思是 log(n)∈O(n^(a/(a+1)),是的,这对于所有正整数 a 都是正确的,因为 a/a+1 < 1 => n^(a/(a+1) ∈ O(n) 和因为 log(n) ∈ O(n) => log(n) ∈ O(n^(a/(a+1))
【讨论】: