【问题标题】:What is an easy way for finding C and N when proving the Big-Oh of an Algorithm?在证明算法的 Big-Oh 时找到 C 和 N 的简单方法是什么?
【发布时间】:2009-09-02 18:25:29
【问题描述】:

我开始学习 Big-Oh 符号。

找到给定函数的 C 和 N0 的简单方法是什么?

比如说:

(n+1)5,或 n5+5n4+10n2+5n+ 1

我知道 Big-Oh 的正式定义是:

令 f(n) 和 g(n) 为函数映射 非负整数到实数。 我们说 f(n) 是 O(g(n)) 如果有 是一个实常数 c > 0 和 整数常数 N0 >= 1 这样对于每个整数 N > N0,f(n)

我的问题是,为 c 和 N0 选择值的好方法是什么?

对于上面的给定多项式 (n+1)5,我必须证明它是 O(n5)。那么,我应该如何选择我的 c 和 N0 以便我可以在不猜测的情况下使上述定义为真?

【问题讨论】:

  • 我认为您想在定义的末尾添加“for all n >= N0”。
  • @Ambouroko,非常正确。修好了。

标签: big-o


【解决方案1】:

您可以通过将多项式中每个项的系数相加来选择常数 c。自从

| n5 + 5n4 + 0n3 + 10n2 + 5n1 + 1n0 | 5 + 5n5 + 0n5 + 10n5 + 5n5 + 1n5 |

你可以简化两边得到

| n5 + 5n4 + 10n2 + 5n + 1 | 5 |

所以 c = 22,这对于任何 n >= 1 始终成立。

通过提高 N0 几乎总是可以找到较低的 c,但是这种方法有效,您可以在脑海中做到。

(多项式周围的绝对值运算要考虑负系数。)

【讨论】:

  • 惊人的解释
【解决方案2】:

通常在不选择具体的 C 和 N0 的情况下完成证明。而不是证明 f(n)

例如,要证明 n3 + n 是 O(n3),请执行以下操作:

(n3 + n) / n3 = 1 + (n / n3) = 1 + (1 / n2) = 1. 在这里你可以选择任何 C >= 2 且 N0 = 1。

【讨论】:

    【解决方案3】:

    当 n->+infitity 时,您可以检查 lim abs(f(n)/g(n)) 是什么,这将为您提供常数(在您的示例中,g(n) 为 n^5,f( n) 是 (n+1)^5)。

    注意,Big-O 对 x->+infinity 的意义是,如果 f(x) = O(g(x)),那么 f(x)“增长速度不会比 g(x)”快,所以您只需要证明 lim abs(f(x)/g(x)) 存在并且小于 +infinity。

    【讨论】:

      【解决方案4】:

      这在很大程度上取决于您正在考虑的功能。但是,对于给定的函数类,您可能会想出一个算法。

      例如,多项式:如果将 C 设置为大于多项式的前导系数的任何值,则可以求解 N0

      【讨论】:

        【解决方案5】:

        在您了解其中的魔力之后,您还应该明白 big-O 是一个符号。这意味着您不必在您解决的每个问题中寻找这些系数,只要您确定您了解这些字母背后发生的事情。您应该只根据 notaion 操作符号,根据其规则。

        没有简单的通用规则来确定 N 和 c 的实际值。你应该回忆你的微积分知识来解决它。

        big-O 的定义与definition of the limit 纠缠不清。它使 c 满足:

        c > lim |f(n)/g(n)|,给定 n 接近 +无穷大。

        如果序列是有上限的,它总是有一个限制。如果不是,那么 f 不是 O(g)。选择具体的 c 后,找到合适的 N 就没有问题了。

        【讨论】:

          猜你喜欢
          • 2014-09-12
          • 2013-10-30
          • 2013-09-30
          • 2019-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多