【问题标题】:What is the big-O of the function (log n)^k函数的大 O 是多少 (log n)^k
【发布时间】:2011-11-23 07:07:45
【问题描述】:

对于任何 k,函数 (log n)k 的大 O 复杂度是多少?

【问题讨论】:

  • 呃....是哪个,标题中的函数还是正文中的函数?

标签: algorithm math complexity-theory big-o logarithm


【解决方案1】:

它仍然是(log(n))^2。对数的幂次方已经是最低/最简单的形式了。

【讨论】:

    【解决方案2】:

    运行时格式为 (log n)k 的任何函数都是 O((log n)k)。该表达式不能使用简单的转换简化为任何其他原始函数,并且很常见的是运行时为 O(n (log n)2) 的算法。具有这种增长率的函数称为 polylogarithmic。

    顺便说一下,通常 (log n)k 写成 logk n,所以上述算法的运行时间为 O(n log2 n. 在您的情况下,函数 log2 n + log n 将是 O(log2 n)。

    但是,假设 k 是一个常数,任何具有 log (nk) 形式的运行时的函数都有运行时 O(log n)。这是因为 log (nk) = k log n 使用对数恒等式,而 k log n 是 O(log n),因为 k 是一个常数。但是,您应该注意不要盲目地得出 O(log (nk)) 的算法是 O(log n) 的结论;如果 k 是函数的参数或取决于 n,则在这种情况下,正确的 big-O 计算将是 O(k log n)。

    根据您工作的环境,您有时会看到符号 Õ(f(n)) 表示 O(f(n) logk n) 表示某个常数 k。这有时称为“soft-O”,用于对数项不相关的上下文中。在这种情况下,您可以说这两个函数都是 Õ(1),尽管这种用法在简单的算法分析中并不常见(事实上,在 Wikipedia 之外,我已经看到它恰好使用过一次)。

    希望这会有所帮助!

    【讨论】:

    • 关于符号的一个注意事项:在编写 log^k n 时应该小心,因为许多随机算法与 log(log(n))log(log(log(n))) 等术语具有复杂性,并且在某些圈子中(例如在运筹学中),作者使用 log^k(n) 来指代对数的重复应用。
    • @Foo Bah- 这是一个很好的观点。符号 log^* 这样也很奇怪。
    【解决方案3】:

    log(n)O((log(n))^2) 所以整个表达式是 O((log(n))^2)

    【讨论】:

    • 你认为log(n)是O((log(n))^2)吗?
    【解决方案4】:

    (log n)^k 是:

    • O((log n)^k)
    • O(n^k)
    • O(n)
    • O(n log n)
    • O(n^1/2)
    • O(n^0.00000002)

    等等。哪一个对您有意义取决于常量和上下文。

    【讨论】:

    • 是的,但只有Θ((log n)^k)
    • @ypercube:OP 没有要求 big-theta。
    • 是的,从技术上讲,您的答案是正确的。我想这就是为什么你有 +1
    • @ypercube:也是Θ((log n)^k + 1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多