【问题标题】:Big-O of log versus square root对数的大 O 与平方根
【发布时间】:2017-02-20 07:08:40
【问题描述】:

一般来说,以下是否总是正确的?

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

如果不是,a 的最大值是多少,这句话将成立?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • " a 的值是什么并不重要":它确实有点重要:当 a 为在区间 [-1, 0]?
    • 你误会了。他在询问函数 log(N) 的复杂性,当 N 变得任意大时。
    • @trincot,OP 指定 a 是“任何恒定的正整数”。 a 不能在区间 [-1, 0] 内。
    • @MalcolmMcLean 我不明白你的评论和我回答的问题之间的区别。
    • @pymaxion,所以这很重要。您的陈述可以理解为意味着 OP 对变量 a 施加的约束是不相关的。
    【解决方案2】:

    基本事实是,由于对数的凹度,它总是低于它的切线。所以

    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

    【讨论】:

      【解决方案3】:

      如果您的意思是 log(n)∈O(n^(a/(a+1)),是的,这对于所有正整数 a 都是正确的,因为 a/a+1 &lt; 1 =&gt; n^(a/(a+1) ∈ O(n) 和因为 log(n) ∈ O(n) =&gt; log(n) ∈ O(n^(a/(a+1))

      【讨论】:

        猜你喜欢
        • 2014-02-19
        • 2012-08-28
        • 2022-01-16
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        • 2021-12-09
        相关资源
        最近更新 更多