大O标记(两面)

我需要逐步证明: 7 + O(n)= O(n)

当双方都有大O时,我不知道该怎么做。

我想我了解大O表示法的概念,但是为什么两边都有大O呢?

wangyi19890218 回答:大O标记(两面)

这种表示法的使用与大O表示法的形式定义不符,因此尚不清楚证明需要达到何种形式的形式。另外,由于该符号不是正式的,因此需要进行一些解释才能确定实际需要证明的内容。

我将其解释为要求证明,给定O( n )中的任何函数,如果将该函数的所有值加7,则新函数也是在O( n )中。更正式地说,对于O( n )中的所有 f ,函数 g n )= f n )+ 7也在O( n )中。

这可以从定义中直接证明:

  1. 我们需要证明,对于O( n )中的每个 f ,函数 g n )= f n )+ 7也在O( n )中。
  2. 由于 f 位于O( n )中,因此存在常量 c N n > = N f n ) cN 的值。
  3. 因此得出 g n )= f n )+ 7 对于所有 n > = N ,cN + 7 c + 7) N ,只要 N > = 1。

因此,给定常数 c N 证明 f 在O( n )中,则常数( c + 7)和max( N ,1)证明 g 在O( n )中。 QED。

,

语句 7 + O(n)= O(n)没有多大意义。 O:(ℕ→ℕ)→P(ℕ→ℕ)是将一个功能映射到一组功能的功能。您不能在功能的中添加七个。您可以“包含”它,但这可能不是该表达式的目的。

您可能需要做的就是证明 O(n + 7)= O(n)。通过证明第一组中的每个元素是第二组的成员,第二组中的每个元素是第一组的成员,可以证明两组是相等的。

O(n)产生的一组函数定义为每个函数 g ,因此对于此 g ,存在一个 n 0 和值 k> 0 ,这样对于所有n∈ℕ具有 n> n 0 ,它保持 g(n)≤k×n 。因此,您需要证明所有这些功能都是 O(n + 7)产生的集合的成员,反之亦然。

,

这是大O表示法的正式定义:

f(n) = O(g(n)) means there are positive constants c and k,such that 0 ≤ f(n) ≤ cg(n) for all n ≥ k. The values of c and k must be fixed for the function f and must not depend on n.big-O notation)。

enter image description here

例如,如果您的复杂度为O(n^2),则可以保证存在某个n值(大于k),之后f(n)在任何情况下都不会超过c g(n)

让我们尝试证明q(n) = f(n) + 7O(n),其中f(n)O(n)

  1. 根据定义,存在一个函数f(n),所有f(n) ≤ c n都使用n ≥ k

  2. 现在,我们要证明q(n)O(n)。我们通过矛盾证明了这一点。我们说如果q(n)不是O(n),则不存在k'c',使得所有q(n) ≤ c' n的{​​{1}} (原始假设)。现在,

n ≥ k'代表所有q(n) = f(n) + 7 ≤ c n + 7 ----(1)。

根据定义n ≥ kc > 0。现在,k > 0代表所有(c + 1) n ≥ c n + 7n ≥ max(k,7)

对所有c > 0(c + 1) n ≥ f(n) + 7

=> n ≥ max(k,7)(来自等式(1))

对于所有c > 0(c + 1) n ≥ q(n) ----(2)的

=> n ≥ max(k,7)

在上式中用c > 0c' = c + 1代替,我们很快发现了一个矛盾:

所有k' = max(k,7)

c' n ≥ q(n)(在步骤2中写为原始假设

这是一个矛盾,因为违反了我们最初的假设,即不存在n ≥ k'c'这样的值。因此,k'O(n) + 7

这完成了您的证明。希望对您有帮助!

编辑:足以证明存在O(n)k'对于我们的证明有效。我们可以简单地跳过矛盾部分。

,

Big O表示法适用于n的渐近大值。因此,常量不会更改Big O表示法。

,

O(n)+ constant = O(n)常量在这种情况下并没有太大区别,因此我们可以忽略常量。

本文链接:https://www.f2er.com/3101407.html

大家都在问