【问题标题】:What functions are included in Big-O Notation?Big-O 表示法中包含哪些功能?
【发布时间】:2017-09-15 00:37:57
【问题描述】:

我正在学习 Big-O 表示法并正在处理一项我一直坚持的任务。基本上,我被赋予了不同的功能,并且必须为它们编写 Big(O)。我认为我的困惑在于 Big-O 中可以包含哪些功能。我对层次结构的理解如下: O(1) O(登录) 上) O(nlogn) O(n^2) O(2^n) O(n!)

我也理解为什么省略了常量和更小的术语,因为我们只是在寻找一个界限。我的问题是当一个函数没有用这些术语编写时会发生什么。例如(这不是我的确切问题,但类似),3^n 不是 2^n 的常数倍数。 Big-O 是 O(3^n) 还是 O(2^n)?我的想法是 O(3^n),因为 3^n 的增长速度比 2^n 快,而且大 O 是一个上限。但我还没有看到 Big O 用不是上面列出的 2 或 n 的基数表示。这是正确的想法吗?

【问题讨论】:

  • 所有函数都可以使用 Big-O 表示法。您列举的函数只是最常见的函数。

标签: algorithm time-complexity big-o asymptotic-complexity


【解决方案1】:

Big-O Notation 中包含哪些函数?

全部*


但是,有些功能更常用,例如您提到的O(logn)。原因是我们试图用大多数算法解决的问题的性质(例如排序),这使我们可以方便地使用某些函数作为上限。


PS:更具体地说,它是一个类列表,其中 n 渐近无穷大。更多信息请阅读Order of functions

【讨论】:

  • 对于“所有”的通俗定义,这个答案介于非常误导和错误之间。
  • @GordonLinoff 帮助我改进我的答案! =) 你有什么建议? “任何功能<...>?”怎么样
  • 。 .从 Wikipedia 页面 (en.wikipedia.org/wiki/Big_O_notation) 开始。 big-O 的“论据”是一类函数,而不是特定函数。
  • @gsamaras 我不同意@GordonLinoff 的观点,big-O 表示法的参数通常是表示界限的最简单函数,但2n+5 = O(n)2n+5 = O(3n-2) 都是语法上有效的数学表达式, 并且都是正确的。该定义不限制您可以使用的功能。如果您写 f(x) = O(g(x)) 但您并不真正知道 fg 是谁,则尤其如此。维基百科页面以“让 f 和 g 是在实数的某个子集上定义的两个函数......”开始正式定义。没有星号,您的答案是可以的。
【解决方案2】:

对于您的具体问题,O(3^n)O(2^n) 不同。看到这一点的一种方法是将值的比率视为 n --> 无穷大。在这种情况下,比率为:

(1.5)^n

而且这种增长是无限的。

同样,n^3n^2 不同,因为比率为:

n

而且这会无限增长,因为 n --> 无穷大。

另一方面,3*n2*n 是相同的。他们的比例是:

1.5

增长为 n --> 无穷大。

了解并非所有函数都用于 big-O 非常重要。基本上,big-O 中的“参数”表示具有与 n --> infinity 相同的渐近行为的一类函数。通常选择类中最简单的成员作为符号。

请记住,大 O 是复杂性的上限。当您实际分析算法时,您可能会使用更复杂的函数并包含常量。事实上,这些可能非常重要,并解释了为什么像冒泡排序这样的算法可能对小数据集是最优的,即使它对大数据集不是最优的。

【讨论】:

    【解决方案3】:

    当且仅当存在常量c&gt;0n&gt;0 时正式f(x) = O(g(x)) 使得:

    c*g(x) &gt; f(x) 对于所有大于或等于 n 的 x。

    记住这个定义,您可以将任何函数插入O,您将获得一组满足该属性的函数。

    另一种思考方式是将O 定义为从函数到函数集的函数。也就是说O(g) = { f : c*g(x) &gt;= f(x) for all x &gt; n} 用于常量cn,如上所述。使用这个定义可以说 f O(g) 恕我直言更有意义,但由于历史原因,我们坚持使用等号的表示法。

    现在,查看定义,我们可以理解您提到的层次结构。 O(n^2) 出现在 O(n) 之后,因为 n = O(n^2) 为真,但 n^2 = O(n) 为假(请注意,我没有使用 != 就像 = sign in the O notation is not a real equals 一样,而是一个任意的语法符号,您不妨用矮人符文替换) .

    另外,如果您想在作业中作弊,只需回答 O(n!) 即可,您在技术上是正确的(最好的正确方式)。现在,通常当人们问“这个函数的顺序是什么”时,他们要求的是一个紧密的界限,即最小的增长函数仍将作为一个界限。你可能也想看看the definitions for other related notations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2018-01-09
      相关资源
      最近更新 更多