algorithm - 在这种情况下,我对 big o 的解释是否正确?

标签 algorithm math big-o asymptotic-complexity

我正试图向我的 friend 解释为什么 7n - 2 = O(N)。我想根据大 O 的定义这样做。

根据大O的定义,f(n) = O(g(n))如果:

我们可以找到一个实数值 C 和整数值 n0 >= 1 使得:

  • f(n)<= C 。 g(n) 对于 n >= n0 的所有值。

在这种情况下,下列解释是否正确?

  • 7n - 2 <= C 。 n

  • -2 <= C 。 n - 7n

  • -2 <= n (C - 7)

  • -2/(C - 7) <= n

如果我们考虑 C = 7,在数学上,-2/(C - 7 ) 等于负无穷大,所以

  • n >=(负无穷大)

这意味着对于 n >=(负无穷大) 的所有值,以下成立:

  • 7n - 2 <= 7n

现在我们必须选择 n0,这样对于所有 n >= n0n0 >= 1 满足以下条件:

  • 7n - 2 <= 7n

因为对于 n >=(负无穷大) 的所有值,不等式都成立,我们可以简单地取 n0 = 1

最佳答案

您走在正确的轨道上。但是,从根本上说,您使用的逻辑不起作用。如果你想证明存在一个 n0 和 c 使得 f(n) ≤ cg(n) 对于所有 n ≥ n0,那么你可以'不要从假设 f(n) ≤ cg(n) 开始,因为这最终是您要证明的!

相反,看看您是否可以从初始表达式 (7n - 2) 开始,然后将其推到以 cn 为上限的内容中。这是一种方法:因为 7n - 2 ≤ 7n,我们可以(通过检查)只选择 n0 = 0 和 c = 7 以查看对于所有 n ≥ n 的 7n - 2 ≤ cn 0

对于更有趣的情况,让我们用 7n + 2 来尝试:

7n + 2

≤ 7n + 2n (for all n ≥ 1)

= 9n

所以通过检查我们可以选择 c = 9 和 n0 = 1 并且我们有 7n + 2 ≤ cn 对于所有 n ≥ n0,所以 7n + 2 = O(n)。

请注意,在这个数学中,我们在任何时候都没有假设最终的不平等,这意味着我们永远不必冒被零除错误的风险。

关于algorithm - 在这种情况下,我对 big o 的解释是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777924/

相关文章:

algorithm - 如何处理多个同时发生的弹性碰撞?

c++ - 您如何判断图片中物体的(现实世界)距离?

algorithm - 使用增量、循环、赋值、零进行除法运算

algorithm - 寻找 f(n) 的上限

algorithm - 图作为邻接矩阵时间复杂度

algorithm - 大 O - O(N^2) 或 O(N^2 + 1)?

java - 识别霍夫曼编码算法中字符的位置

algorithm - 给定代码的时间复杂度是多少?

c++ - AES CBC算法的实现

Chudnovsky 算法产生 -nan