【问题标题】:Big-O notation finding c and n0Big-O 表示法找到 c 和 n0
【发布时间】:2013-01-10 00:56:44
【问题描述】:

我刚刚被介绍给 Big-O 表示法,并且有人向我提出了一些问题。但是我对如何确定n0 的值感到困惑。 我必须证明3n^3 +20n^2 + 5 是 O(n^3)。到目前为止,我有:

3n^3 + 20n^2 + 5 <= cn^3

(3 - c)n^3 + 20n^2 + 5 <= 0

5 <= n^3(c - 3) - 20n^2

5 <= n^2(n(c - 3) - 20)

我只是不知道如何从这里找到 n0 和 c。有人介意解释一下吗?

【问题讨论】:

    标签: big-o


    【解决方案1】:
    3n^3 + 20n^2 + 5 <= cn^3
    => 20n^2 + 5 <= cn^3 - 3n^3
    => 20n^2 + 5 <= n^3(c - 3)
    => 20n^2/n^3 + 5/n^3 <= n^3(c - 3)/n^3
    => 20/n + 5/n^3 <= c - 3
    => c >= 20/n + 5/n^3 + 3
    

    根据您希望大于条件开始的位置,您现在可以选择 n0 并找到值。

    例如,对于 n0 = 1:

    c >= 20/1 + 5/1 + 3 which yields c >= 28
    

    值得注意的是,根据 Big-O 符号的定义,实际上并不要求边界如此紧密。由于这是一个简单的函数,您只需猜测并检查它(例如,为 c 选择 100 并注意该条件确实渐近地为真)。

    例如:

    3n^3 + 20n^2 + 5 <= (5 * 10^40) * n^3 for all n >= 1
    

    不等式成立就足以证明 f(n) 是 O(n^3)。


    为了提供更好的证明,实际上需要证明存在两个常量cn0,使得f(n) &lt;= cg(n) for all n &gt; n0

    使用我们的 c = 28,这很容易做到:

    3n^3 + 20n^2 + 5 <= 28n^3
    20n^2 + 5 <= 28n^3 - 3n^3
    20n^2 + 5 <= 25n^3
    20/n + 5/n^3 <= 25
    
    When n = 1: 20 + 5 <= 25 or 25 <= 25
    For any n > 1, 20/n + 5/n^3 < 25, thus for all n > 1 this holds true.
    
    Thus 3n^3 + 20n^2 + 5 <= 28n^3 is true for all n >= 1
    

    (这是一个做得很糟糕的“证明”,但希望这个想法能显示出来。)

    【讨论】:

    • 现在我更困惑了,问题的答案说我应该选择 n0 = 21 和 c = 4 :S
    • @DomBrown 嗯,也许我误解了 n0 是什么。 n0 是3n^3 + 20n^2 + 5cn^3 相交的点,对吗?该交集是c(间接)的函数,因此n0c 没有一个解决方案。
    • 我的笔记是这样说的:给定函数 f(n) 和 g(n) 我们说 f(n) 是 O(g(n)) 如果有正常数 c 和 n0 使得 f (n) ≤ cg(n) 对于 n ≥ n0
    • @DomBrown 对。大 O 只需要渐近地满足条件。这意味着对于部分域,f(n) 可以 > cg(n)。只要达到某个点(此处称为n0),f(n) 必须>= cg(n)。要证明 Big-O 关系,您所要做的就是证明cn0 的存在。 (值得注意的是,在我的回答中,我并没有从技术上证明它们的存在。我稍后会编辑我的答案。)
    • 感谢您的帮助。我想澄清最后一件事。这个问题有可能有多个答案吗?即 n0 和 c 可能还有其他两个值?
    【解决方案2】:
    3n^3 + 20n^2 + 5 <= cn^3
    
    5 + 20n^2 <= n^3(c - 3)
    
    5/n^3 + 20/n <= c - 3
    
    For n0 = 20, c >= 5, since 5/n^3 + 20/n < 2
    

    【讨论】:

    • 噢,比我快 30 秒 :)。 +1
    • 我认为应该是c>=2?
    • 5 > 2 所以没有什么不同。任何 n0 和任何持有的 c 都可以。
    【解决方案3】:

    如果你有f(n) = (3n^3 + 20n^2 + 5),你想看看是不是O(g(n))哪里是g(n) = n^3,我相信你可以把f(n)/g(n)的极限当作n->无穷大。

    由于限制为 3,您可以看到 3n^3 + 20n^2 + 5 的增长速度仅与 n^3 一样快。当你有一个像3n^3 + 20n^2 + 5 这样的多项式时,你可以通过检查知道最大的阶项总是O(f(n)) 的值。

    找到 n0 和 C 并没有多大帮助,但它是确定某事物的顺序的一种相对简单的方法。正如其他人在这里所说,您可以选择 n0 然后计算 C。

    如果你选择 n0 = 1,那么你有3*(1^3) + 20*1^2 + 5 = 28。所以如果c1^3 &lt;= 28,c 必须是 28。你已经证明有一个 c 和 n0 满足这个条件,所以你已经证明 f(n) 是 O(n^3)

    【讨论】:

      【解决方案4】:

      除以 n^3 我们得到 3+20/n+5/n^3

      取C值为10 20/n+5/n^3

      我们需要针对不同的 n 值来解决这个问题,直到满足条件 C=10 和 n0 = 3 将给出解决方案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2012-03-02
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多