【问题标题】:Calculating c and n sub naught in Big-O Analysis在 Big-O 分析中计算 c 和 n 子零
【发布时间】:2014-08-15 05:50:02
【问题描述】:

MyCodeSchool.com 上的优秀人士有 this introductory video on YouTube,涵盖了 Big-O、Theta 和 Omega 表示法的基础知识。

提供了以下 Big-O 表示法的定义:

O(g(n) ) := { f(n) : f(n) ≤ cg(n) },对于所有 n ≥ n0

我对方程的随意理解如下:

给定一个函数f(),它以n为输入,存在另一个函数g(),其输出总是大于或等于f()的输出——给定两个条件:

  • g() 乘以某个常数 c
  • n 大于某个下限 n0

我的理解正确吗?

此外,还提供了以下具体示例来说明 Big-O:

给定:

  • f(n) = 5n2 + 2n + 1

因为以下都是真的:

  • 5n2 > 2n2,对于所有n
  • 5n2 > 1n2,对于所有n

如下:

  • c = 5 + 2 + 1 = 8

因此,视频得出结论,对于所有n ≥ 1,f(n) ≤ 8n2,并且 g(n) = 8n2

我想也许视频得出的结论是 n0 一定是1,因为1 是等式 8n2 = 5n2 + 2n + 1 (负三分之一也是根,但 n 仅限于整数。所以,没有骰子。)

这是为 Big-O 表示法计算 n0 的标准方法吗?

  • 在您的多项式中取最大的幂因数
  • 乘以时间函数中系数的总和
  • 设置他们的乘积等于你的时间函数
  • 从零开始
  • 拒绝所有不在整数集中的根

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: performance time big-o


    【解决方案1】:

    您的理解大多是正确的,但从您的措辞 - “我认为视频可能得出结论 n0必须 为 1”,我必须指出它取 n0 为 2 或 3 等也是有效的。事实上,任何大于 1 的数都满足要求的条件,实际上有 无穷大(c, n0)!

    有很多选择

    需要注意的重要一点是,常量cn0并不真的没关系,我们只关心是否存在一对常量 (c, n0)


    基础知识

    Big-O 表示法描述了给定函数 f渐近行为,它本质上描述了 f上界 /em> 当其输入值足够大时。

    正式地说,如果存在一个常数,我们说f是另一个函数g的大O,即f(x) = O(g(x)) c 和一个常数 n0 使得以下不等式成立: f(n) ≤ c g(n),对于所有 nn0

    注意,不等式抓住了上限的概念:f的上限是g正倍数/em>。此外,当输入 n 足够大(例如,大于 n0)时,“for all”条件满足上限成立。


    如何选择(c, n0)

    为了证明 f(x) = O(g(x)) 对于给定的函数 f, g,我们只需要选择 any (c, n0) 使得不等式成立,然后我们就完成了!

    没有标准方法可以找到(c, n0),只要使用任何你认为有用的数学工具。例如,您可以固定 n0,然后通过微积分计算 f(x) 的最大值来找到 c /g(x) 在区间 [n0, +∞).

    在您的情况下,您似乎试图证明 d 次的 多项式xd 的大 O sup>,以下引理的证明给出了 a 选择 (c, n0) 的方法:

    引理

    如果fd次多项式,则f(x) = O(xd).

    证明:我们有 f(x) = ad xd + ad-1 xd -1 + ... + a1 x + a0,对于每个系数 ai,我们有一个i ≤ |ai| (ai 的绝对值)。

    取 c = (|ad| + |ad-1| + ... + |a1| + | a0|) ,并且 n0 = 1,那么我们有:

    f(x) = ad xd + ad-1 xd-1 sup> + ... + a1 x + a0

    |ad| xd + |ad-1| xd-1 + ... + |a1| x + |a0|

    (|ad| + |ad-1| + ... + |a1| + |a0|) xd

    = c xd,对于所有 x ≥ 1

    因此我们有 f(x) = O(xd)

    【讨论】:

    • 谢谢!所以,假设我们有一个单调递增的 f(),就像我们上面的 f()。我们可以将 c 设置在任何我们想要的位置,但是这样做会影响 f() 和 g() 相交的点。因为我们正在处理一组 n 限制为整数,并且表面上我们不关心大小为零的数据集,所以选择 n naught 至少为 1 的 c 是谨慎,但是不是数学上必要的
    • 另外,ai < |ai| 是什么关系?这就是说,“有时 sub i 小于零;有时不是。但当它是时,它小于 sub i 的绝对值”?
    • @LMiz 你说得对,c的值一般会影响n0的值。此外,在数学上没有必要选择 n0 至少为 1 的 c。事实上,有时不可能找到一个f(1) ≤ c g(1)c(例如,考虑f(x) = x, g(x) = x - 1,在这种情况下,我们当然有 f(x) = O(g(x)))。另一方面,c 不可能是我们想要的任何东西,考虑 f(x) = 2x, g(x) = x 的情况,显然 c = 1 在这种情况下不起作用。
    • 关于绝对值你是对的。请注意,取绝对值是必要的。这将确保证明中的 c > 0,这是定义所要求的。 (乘以负数会改变函数的符号,因此不会给出上限)
    • 熟能生巧,这尤其适用于数学,你真的需要亲自动手才能真正理解事物的运作方式。所以我强烈建议你先做一些big-o exercises
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2015-07-28
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多