线性复杂度和二次复杂度

时间:2010-05-05 09:15:17

标签: complexity-theory big-o time-complexity

我只是不确定......

如果您的代码可以执行以下任何一种复杂功能:

  1. O(n)的序列,例如:依次为两个O(n)
  2. O(N²)
  3. 首选版本是可以线性时间执行的版本。是否会有一段时间O(n)的序列太多而O(n²)会更受欢迎?换句话说,语句C x O(n)<对于任何常数C,O(n²)总是为真?

    为什么或为什么不呢?有哪些因素会影响这种情况,以便选择O(n²)复杂度会更好?

4 个答案:

答案 0 :(得分:9)

我认为这里有两个问题;首先是符号所说的,第二个是你真正在真实节目上测量的东西

  1. 大O作为限制为n - >;因此,就大O而言,无穷大,O(n)<无论任何有限常数,O(n ^ 2)始终为真。

  2. 正如其他人已经指出真正的程序只处理某些有限输入,因此很有可能为n选择足够小的值,使得c * n> 1。 n ^ 2即c> n,但严格来说,你不再处理大O

答案 1 :(得分:2)

如果常数C大于n的值,则O(n²)算法会更好。

答案 2 :(得分:1)

O符号总是存在隐含常数,所以是的,对于足够小的n,O(n ^ 2)可能比O(n)更快。如果O(n)的常数远小于O(n ^ 2)的常数,则会发生这种情况。

答案 3 :(得分:0)

C x O(n)&lt; O(n²)并不总是正确的,n中有一个点可以反转条件。

当C大且n小时,则C x O(n)> O(N²)。 然而,C总是恒定的,因此当n缩放到大数时,C x O(n)< O(N²)。

因此,当n很大时,O(n)总是优于O(n²)。