【问题标题】:What is Big O Notation? [duplicate]什么是大 O 表示法? [复制]
【发布时间】:2011-04-13 23:27:05
【问题描述】:

可能重复:
Plain English explanation of Big O

我知道大 O 表示法用于评估算法的效率,但我不明白您如何阅读大 O 表示法或算法的效率到底有多高。有人可以解释大 O 符号的基础知识吗?谢谢。

【问题讨论】:

  • 同[Big O的纯英文解释](*.com/questions/487258/…)。
  • 大括号中描述的功能越强大,例如O(n^2) 中的 n^2 算法越复杂。只需为 n 输入一个数字。假设 3 所以 O(n^2) = O(9) 比 O(2n) = O(6) 描述的算法具有更高的复杂度。

标签: computer-science big-o


【解决方案1】:

What is a plain English explanation of "Big O" notation? 很好地解释了什么是 Big-O 表示法以及如何使用它。

【讨论】:

    【解决方案2】:

    This 页面看起来向我解释得很清楚。

    本质上,这是一种快速准确地评估算法性能特征的便捷方式。无论是在最坏情况下还是在平均情况下算法运行的速度有多快。在最坏或平均情况下它使用多少空间。有时更有用的是算法如何对多个项目执行,这称为摊销分析。

    该符号的基本特征是它会忽略随着n 变大而变得无关紧要的术语。例如,当 n 变大时,n^2 + 2n 2n 变得无关紧要。这将是O(n^2)

    【讨论】:

    • 您建议的页面非常有帮助:我也一直在努力掌握这个概念。
    【解决方案3】:

    Big O Notation 描述了函数的限制行为。

    对于计算机科学,通常使用它来展示算法如何在获得更大的数据集时很好地扩展。例如,集合中的查找通常会有所不同,并根据集合的类型使用 Big-O 表示法进行描述。 .NET Framework 中的 Dictionary<T,U> 有一个 Item 属性,记录如下:

    获取或设置此属性的值接近 O(1) 操作

    这基本上是说,无论您添加多少项目到集合中,取出一个项目都将在恒定时间内完成。另一方面,List<T> 对其Contains method 的描述如下:

    此方法执行线性搜索;因此,此方法是 O(n) 操作,其中 n 为 Count。

    这基本上是说随着您添加更多项目,算法会在线性时间内变慢。如果您放入 1000 个项目,则平均而言,它需要大约 10 倍的时间,作为包含 100 个项目的列表等。

    【讨论】: