【问题标题】:BigO Notation, understandingBigO 表示法,理解
【发布时间】:2019-06-27 00:34:12
【问题描述】:

我在其中一个视频 (https://www.youtube.com/watch?v=A03oI0znAoc&t=470s) 中看到,如果假设 f(n)= 2n +3,那么 BigO 是 O(n)。

现在我的问题是,如果我是一名开发人员,并且我被赋予了 O(n) 作为 f(n) 的上限,那么我将如何理解,上限的确切值是多少。因为在 2n +3 中,我们删除了 2(因为它是一个常数)和 3(因为它也是一个常数)。所以,如果我的函数是 n = 1 的 f(n),我不能说 g(n) 是 n = 1 的上限。

1 不能是 1 的上限。我很难理解这一点。

【问题讨论】:

    标签: big-o


    【解决方案1】:

    我知道这是一个部分的(并且可能是错误的答案)

    来自Wikipedia

    大 O 表示法根据函数的增长率来表征函数:具有相同增长率的不同函数可以使用相同的 O 表示法表示

    在你的例子中, f(n) = 2n+3 与 f(n) = n 具有相同的增长率

    如果你绘制函数,你会看到两个函数有相同的线性增长;并且当 n -> 无穷大时,两者之间的差异变得最小。

    在大 O 表示法中,当 n=1 时,f(n) = 2n+3 无意义;你需要关注趋势,而不是谨慎的价值观。

    【讨论】:

    • 谢谢你 max 知道了。我们需要看到它的增长(当我们在图中绘制时),对于给定的 f(n) 值,g(n) 如何增长。
    • 请注意f(n)=2n+3f(n)-n 之间的区别是n+3 这不是“最小”,它实际上大于第二个函数。
    • @LeandroCaniglia ,对不起,我没明白。所以你在这里说,O(n) 不是 2n +3 的正确选择?
    • 2n+3O(n)是完全正确的。我正在对@Max 的句子做出反应:[...] as n -> infinity,两者之间的差异变得最小。为什么?因为两个O(n) 之间的差异通常是O(n),因此几乎不是“最小”的。
    • 查看两个 O(n) 函数之间的差异并不是正确的衡量标准。相反,重要的是 O(n^2)/O(n) 随着 n 趋于无穷大而趋于无穷大。每当分子的复杂度高于分母时,就会发生这种情况。无论 O(n) 函数中使用什么常数,O(n^2) 函数最终总是胜出。你可以有 (10^-100 * n^2) / (10^100 * n)。没关系。 googol 次 n 不足以击败 n^2。
    【解决方案2】:

    作为开发人员,您会考虑将 big-O 作为决定使用哪种算法的首要指标。如果您有一个算法,例如O(n^2),您将尝试了解是否还有另一个算法,例如O(n)。如果问题本质上是O(n^2),那么大O 符号将不会提供进一步的帮助,您将需要使用其他标准来做出决定。但是,如果问题本质上不是O(n^2),而是O(n),则应丢弃任何恰好是O(n^2) 的算法并找到O(n) 之一。

    因此,big-O 表示法将帮助您更好地对问题进行分类,然后尝试使用复杂度与 big-O 相同的算法来解决它。如果您有幸找到了 2 个或更多具有这种复杂性的算法,那么您将需要使用不同的标准来思考它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2014-03-07
      • 2023-01-02
      相关资源
      最近更新 更多