【问题标题】:Big O calculation大O计算
【发布时间】:2014-10-12 17:04:08
【问题描述】:

我正在学习大 O 符号。我知道大 O 表示为:

f(n) E O(g(n)) 或 f(n) = O(g(n))

表示函数f(n)的增长率不大于g(n)。

现在假设我有一个方程式:

5n +2 E O(n)

根据上面的等式,'n' 不应该等于 g(n) 并且 '5n+2' 不应该等于 f(n)。 现在对于任何 n 值。 f(n) 总是大于 g(n)。那么在这种情况下大 O 是怎样的呢?

【问题讨论】:

  • 常数因素与考虑函数的增长率无关。
  • 所以这意味着我的示例中的 f(n) 和 g(n) 都以 'n' 作为主要术语。这是否意味着他们在这个例子中的增长率将相同?
  • 是的。无论ab 的常数值如何,a+bn 的增长率都等于n

标签: time-complexity big-o


【解决方案1】:

您应该更详细地阅读 Big Oh 的概念。

关系

f(n) E O(g(n)) 

对于一些常量 C

f(n) <= C * g(n)

在这种情况下,C 是一个 5n + 2 总是小于 Cn 的值

如果你解决它:

5n + 2 <= Cn

2 <= (C - 5)*n

从这里你可以很容易地发现如果 C = 6 那么对于 n 的任何值,您的等式始终成立!

希望这会有所帮助!

【讨论】:

  • 但在这种情况下,据我现在从 Sneftel 的回答中了解到,f(n) 为“5n+2”和 g(n) 为“n”的增长率将相同。因为它们都有相同的前导词,即'n'
  • 是的,增长率将是相同的..但现在你必须为你的 f(n) 设置上限
【解决方案2】:

这不是大 O 符号的正确定义。 If f(x) is O(g(x)),那么一定存在一些常数 C 和 N,使得:|f(x)| &lt;= C |g(x)| for all x&gt;N。因此,如果 f(x) 在某个 x 值 N 之后总是小于或等于某个常数 * g(x),则 f(x) is O(g(n))。实际上,这意味着常数因素是无关紧要的,因为您可以选择 C ​​作为任何值。所以,对于你的例子f(n)=5n+2 &lt;= C*g(n)=10000n 所以,f(n) is O(g(n))

【讨论】:

    【解决方案3】:

    考虑到 Big-O 表示法代表什么,您有这样的陈述

    5n +2 E O(n)

    或者也一样 5n +2 = O(n)

    鉴于 Big-O 表示法规定了我们函数的上限,即为给定函数的可能结果建立上限,可以通过以下方式重新考虑问题:

    5n +2 some 常数 c

    我们可以看到这个陈述是正确的,因为有可能找到一个大于或等于我们函数的常数(根据我们的需要使这个常数变大或变小)。

    以更一般的方式,我们可以说任何给定的函数 f(n) 将属于 O(g(n)) 如果 g(n) 的 degree 更大等于或等于f(n)的degree,即其项中的最高度。

    正式地: 令 f(n) = n^x; 让 g(n) = n^y;所以 x

    那么 f(n) = O(g(n))。

    反过来,Big-Omega 也是如此。 希望对你有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多