big-o - 对数和幂的渐近复杂性

标签 big-o complexity-theory logarithm

很明显,log(n)O(n)。但是,(log(n))^2 呢? sqrt(n)log(n) - 什么是什么?

有这样一组比较:

nᵃ   (vs.)   (log(n))ᵇ

我经常遇到这些比较,但我从来没有想出解决它们的好方法。解决一般案例的策略提示?


[编辑:我不是在谈论计算这些函数值的计算复杂性。我说的是功能本身。例如,f(n) = ng(n) = log(n) 的上限,因为 f(n) ≤ c g(n) 用于 c = 1n₀ > 0。]

最佳答案

对于任何正常数 a、b,log(n)^a 总是 O(n^b)。

您在寻找证据吗?所有这些问题都可以通过以下技巧简化为看到 log(n) 是 O(n):

log(n)^a = O(n^b) 等同于: log(n) = O(n^{b/a}),因为提高到 1/a 次方是递增函数。 这相当于 log(m^{a/b}) = O(m),通过设置 m = n^{b/a}。 这相当于 log(m) = O(m),因为 log(m^{a/b}) = (a/b)*log(m)。

您可以通过归纳法证明 log(n) = O(n),重点关注 n 是 2 的幂的情况。

关于big-o - 对数和幂的渐近复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7882915/

相关文章:

math - n维快速傅立叶变换的计算复杂性?

c++ - 两个for循环,大O理论

algorithm - 算法分析中如何判断一个函数是否属于特定的渐近类型?

algorithm - 给定循环的时间复杂度 O(logn) 或 O(n)

java - 我将如何在 Big Theta Θ 表示法下分析该算法的形式复杂性?

algorithm - 这个(非抢占式)调度算法的复杂度是多少?

javascript - BigInt 的对数

python - 在Python中以对数尺度插值

algorithm - 登录实际上是什么意思?

javascript - 避免重复计算优化嵌套for循环的时间复杂度