对数大 O 与平方根

Big-O of log versus square root

一般来说,下列情况总是正确的吗?

log(n) = O(na/(a+1))? s.t。 a 是任何常量正整数,可能非常大。

如果不是,那么此陈述成立的 a 的最大值是多少?

随着函数的运行,log(n) 总是比 n 增长得慢n 变大时。见 https://math.stackexchange.com/questions/1663818/does-the-logarithm-function-grow-slower-than-any-polynomial 证明。

所以只要a是一个常数正整数,它的值是多少并不重要,因为总是可以找到常数Ck 这样 log(n) <= |C( na/(a+1)| + k,也就是big-O的定义.

不过你也可以直观的理解:na/(a+1) 接近 n 随着 a 变大。自然地,log(n) 总是 O(n).

如果你的意思是 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))

基本事实是,由于对数的凹性,它总是在切线以下。所以

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.