Big O表示法的预期语法

时间:2012-02-02 17:31:04

标签: algorithm big-o

是否存在有限数量的基本O符号,考虑到您要将它们“提炼”到最重要的部分?

为O(n ^ 2):

O(N):

O(1):

O(log n)对数

O(n!)factorial

O(na)多项式

或者您是否希望计算出O(n ^ 4)等变体...如果是这样,那是唯一的例外吗? X的力量一个?

4 个答案:

答案 0 :(得分:3)

通常,您将Big-O符号(以及相关的Bachman-Landau符号,如Big-Theta和Big-Omega)提炼为增长最快的N项的运算。因此,您删除/简化较小的术语(N 2 + N == O (N 2 ))和术语的非变量系数(< em> O (4N 2 )== O (N 2 )),但不是幂或指数基( O (3 4N )== O (3 N ))。你也不剥离变量系数; NlogN是NlogN,而不是logN或N。

因此,如果复杂度是多项式(N的幂)或指数(基数的N次幂),通常只能看到Big-Oh表示法中的数字。最常见的Big-Oh符号与你所展示的一样,增加了NlogN(非常常见)。

但是,如果要区分具有相同一般复杂度的两种算法,则可以添加较小的术语和/或系数来证明相对差异;在将其与其他 O (N)算法进行比较时,可以将线性执行但具有另一个指令的两倍的算法描述为 O (2N)。但是,单独考虑,两种算法都是线性的( O (N))。

一些Big-O符号不是代数,并且可能涉及多个变量,而这些变量最简单的一般情况形式。例如,计数排序是复杂度 O (Max(N,M)),其中N是列表中元素的数量,M是这些元素的范围。通常可以通过在N方面定义M并因此减少到单个变量来减少这种情况(如果所讨论的列表是前N个方格,则M = N 2 -1 ),但在一般情况下,两个变量都是独立且重要的。 BucketSort的复杂性正式为 O (N),但实际上它更像是 O (NlogM),其中M是N个元素列表的最大值。 M通常被认为是无关紧要的,但这取决于您通常排序的值(在数十亿中排序5个值将需要更多的循环来比较每个10的幂,而不是遍历列表的遍历以将它们放入桶中)和使用的基数(RadixSort是base-2 BucketSort;再次,使用更大的log 2 值对值进行排序将需要比遍历更多的循环。)

答案 1 :(得分:1)

Big-O表示法是一种为函数的限制行为提供上限的方法。其功能形式没有限制。但是,正如Wikipedia

所解释的那样,有某些约定
  

在典型用法中,O表示法的正式定义不直接使用;相反,函数f(x)的O表示法由以下简化规则导出:

     
      
  • 如果f(x)是几个术语的总和,则保留增长率最大的术语,并忽略所有其他术语。
  •   
  • 如果f(x)是多个因子的乘积,则省略任何常数(产品中不依赖于x的项)。
  •   

当然,有些功能形式会更频繁地出现在其他形式上。列出了一些常见的类here

答案 2 :(得分:1)

不,不同O类的数量不是有限的。

正如您已经提到的,O(n ^ x)描述了每个x的不同集合。这不是唯一的“例外”。对于每个x,O(x ^ n)也是不同的集合。同样地,O(n ^ n),O(n ^ n ^ n),O(n ^ n ^ n ^ n)等都是不同的集合(当然,你可以无限地继续这种情况)。

答案 3 :(得分:0)

通常,您将表达式拆分为产品总和,保留最大项,并除以常数以尽可能简化它。

例如:

n(2n + 3log(n))=&gt; 2n ^ 2 + 3nlog(n)=&gt; 2n ^ 2 =&gt; N ^ 2

(n + 1)(2nlog(n)+ n)=&gt; 2n ^ 2log(n)+ n ^ 2 + 2nlog(n)+ n =&gt; 2n ^ 2log(n)=&gt; N R个2log(n)的