【问题标题】:Confused on Little O meaning对小O的含义感到困惑
【发布时间】:2016-04-02 15:05:37
【问题描述】:

所以我从little o page 得到的是,当您应用小 O 表示法时,我们必须检查一个速率是否比另一个快(小 o 关注上限)?

在这种情况下,当我们应用小o时:

2^n = o(3^n) 将是错误的,因为 2^n 和 3^n 上限在速度上相等但不小于

2n = o(n^2) 为真,因为 n^2 的上限为 2,而 2n 没有上限。

我走对了吗?

【问题讨论】:

  • 如果你在cs.stackexchange.com上提问,你可能会得到更好的答案
  • 我投票结束这个问题,因为它属于 cs.stackexchange.com。
  • @KurtRevis 我更专注于算法和编程。这也可以在 cs 中,但也可以在堆栈溢出中。我只是想在编程和计算方面做得更好。可悲的是,我不是在学习或学习计算机科学(我是自学),我只是在 google 上搜索了“有效编程”并遇到了这个,这是 cs 和整个编程行业的一小部分。

标签: algorithm big-o time-complexity computer-science little-o


【解决方案1】:

大 O 和小 O 之间的唯一区别是大 O 允许函数在相等的阶段增长,但是小 O 表明 g(x) 具有更高的增长率,并且在特定点 x 之后永远不会相等'(考虑 f(x)=o(g(x)) )

您提供的第一个示例是错误的,因为小 O 指出: 对于 f(x)=o(g(x)) |f(x)|x'

然而,在上述 f(x)=2^x 和 g(x)=3^x 的情况下,不存在满足它的 C 和 x' 因为 g(x) 的增长率更高。

如果您了解大 O,定义小 O 的最佳方法是:

如果一个函数是大 O 但不是大欧米茄,则该函数称为小 O -- 这是因为大欧米茄和大 O 仅在两个函数 s 的增长率相等的情况下相交,所以如果我们删除该特定情况,它是小 O。

但是请记住,如果 f(x) 是大 O g(x),它也可以是 g(x) 的小 O,但反之亦然是不可能的。

【讨论】:

    【解决方案2】:

    2^no(3^n)(小 o)中,因为:

    lim_n->infinity (2^n / 3^n) = 0
    

    类似地。对于2n,很容易表明它在o(n^2)

    “little o”的直观含义是 - 它是一个上限,但不是一个严格的上限。这意味着,如果 f(n) 在 O(g(n)) 中,则函数 f(n)o(g(n)) 中,但不在 Omega(g(n)) 中。

    在您的示例中,2^nO(3^n) 中,但它不在Omega(3^n) 中,所以我们可以说它在o(3^n)

    【讨论】:

    • 我有点理解。试图说 2^n = o(3^n) 是真的吗?因为在提供的链接中,它必须小于小 o 和大 O,它可能小于或等于...我只是混淆抱歉。
    • @SA 因为lim_{n->infinity} (2^n/3^n) = 02^n 不在Omega(3^n) 中。因为它也在O(3^n),我们可以断定它在o(2^n)
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    相关资源
    最近更新 更多