【问题标题】:Improving complex改善综合体
【发布时间】:2014-09-15 01:49:53
【问题描述】:

我有点困惑。如果我必须证明,

现在,在这里,如果我计算极限,

由此我可以说这确实属于 big-o(4n)。 是 对于 n 的任何值,这都不正确。 这是正确的证明方式吗?

【问题讨论】:

    标签: algorithm big-o


    【解决方案1】:

    常数不会影响O 的时间复杂度。

    我的意思是O(2*n) = 2*O(n) = O(n)

    如果2n+1O(4n) => 2n+1O(n)

    因为lim(n->infinite)(2n+1)/n = 2 是一个有限数 => 2n+1O(n) 中。

    【讨论】:

    • 这就是我需要显示的所有内容才能显示它属于 O(n)?没有不平等的事情?
    • 如果限制 f(n) / g(n) 是有限的(2n+1/n)=> f(n)O(g(n)) 中(2n+1O(n) 中)。这种方法只是包含c的定义的另一种形式。
    • 这之后,我用c的这个值不是要找出n0的值吗?
    • 是的,如果您使用这种方法,则不需要其他方法。如果您从数学角度考虑,它们是等价的。
    【解决方案2】:

    根据定义,如果有一个c 常量为f(n) <= c*g(n) 成立,那么f(n) 属于g(n)。 所以确实,(2n+1) 属于 O(4n) 因为有常量 1 和 4 持有:
    1*(2n+1) <= 4n <= 4*(2n+1)

    (这也表明(4n)属于O(2n+1)。这是因为它们都是O(n)

    【讨论】:

    • 假设我被要求证明这种关系。现在,我从取出限制开始。极限给出的答案不满足关系。那么,我该怎么写呢?我是否写了,因为它会满足其他值,因此关系为真?
    • 因为有一个满足关系的常数。它不需要保持任何常数,存在一个常数就足够了。在这种情况下,(1/10)*n <= 1*(2n+1) <= 4n <= 4*(2n+1) <= 10*n 所以这两个函数都是O(n)
    • 知道了,谢谢。那么,那我为什么要取出限制呢?难道我不能直接按上面的方法,即不等式方法进行吗?
    • 这里很容易看到1*(2n+1) <= 4n。有时,要确信某个常数保持不等式并证明不等式需要使用极限并不是很简单
    【解决方案3】:

    没有最好的常数。正如您所观察到的,2 无法正常工作。但是,对于每个epsilon > 0,常量2 + epsilon 都可以使用。这通常可以通过扩展极限的定义来证明。当n 趋于无穷时,f(n)/g(n) 的极限接近c 的条件是,对于每个epsilon > 0,存在n0,这样,对于所有n > n0,我们有|f(n)/g(n) - c| < epsilon,这意味着f(n)/g(n) < c + epsilon,这意味着f(n) < (c + epsilon) g(n)。由此可知f(n)O(g(n)),大O 常数为c + epsilon

    【讨论】:

    • 知道了。但是,我有一个小小的疑问。假设我被要求证明这一点。我该怎么写呢?我计算不等式。它不满足。那么,我是写你上面写的论点还是我可以写,对于大o表示法,常量的值应该介于 [0,inf) 之间,因此它是一个真正的关系?
    • @Qin 选择一个更大的常数。为了证明f(n)O(g(n)),同样有效的是,对于所有足够大的n,证明f(n) <= 3 g(n)f(n) <= 100000000000 g(n),或...
    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多