大O代数简化

时间:2014-01-29 22:16:40

标签: math data-structures big-o

  

简化大O表达式

     
      
  1. 我们省略所有常量
  2.   
  3. 我们忽略n
  4. 的低权力   

例如:

O(n + 5) = O(n)

O(n² + 6n + 7) = O(n²)

O(6n1/3 + n1/2 + 7) = O(n1/2)

我在这些例子中是对的吗?

2 个答案:

答案 0 :(得分:4)

<强> 1。我们省略了所有常量

嗯,严格地说,你不要省略所有常数,只省略最外面的倍增常数。这意味着O(cf(n)) = O(f(n))。添加常数也很好,因为 f(n) < f(n)+c < 2f(n)n开头,O(f(n)+c) = O(f(n))

但是你不要在复合函数中省略常量。有时可能会完成(例如O(log(cn))甚至O(log(n^c))),但一般情况下都不行。例如考虑2^2n,可能很容易将2放在O(2^n)中,这是错误的。

<强> 2。我们忽略n

的低权力

是的,但请记住,您并不总是使用多项式函数。通常可以忽略任何添加的渐近降低函数。假设您f(n)g(n)g(n) = O(f(n))O(f(n) + g(n)) = O(f(n))

你不能通过乘法来做到这一点。

答案 1 :(得分:1)

你几乎是对的。第二个规则应该是你忽略了除n向无限大的最大限度以外的所有条件。如果您的术语不是n的幂,如log或其他数学函数,那么这一点非常重要。

值得注意的是,大O符号有时会掩盖重要的其他细节。 O(n log n)的算法将比O(n^2)的算法具有更好的性能,但前提是输入足够大,以便大多数术语能够支配运行时间。可能对于您在特定应用程序中实际需要处理的大小输入,O(n^2)算法实际上表现更好!