是O(n ^ 2)还是O(1)?

时间:2015-05-21 03:25:24

标签: algorithm

  

Is the execution time of this unique string function reduced from the naive O(n^2) approach?

这个问题有很多有趣的讨论让我想知道我们是否对算法设置了一些阈值,是否会改变Big-O的运行时间复杂度?例如:

void someAlgorithm(n) {
    if (n < SOME_THRESHOLD) {
         // do O(n^2) algorithm
    }
}

是O(n 2 )还是O(1)。

2 个答案:

答案 0 :(得分:13)

这将是O(1),因为它是一个常数,因此无论输入多大,您的算法都会在小于该常数的时间内完成。

从技术上讲,它也是O(n^2),因为它是一个常数c,无论你的输入有多大,你的算法都会在c * n ^ 2时间单位下完成。由于big-O为您提供了上限,因此O(1)的所有内容也都是O(n^2)

答案 1 :(得分:0)

如果SOME_THRESHOLD是常数,那么你已经对函数的增长硬编码了一个常数上限(而f(x) = O (g(x))给出了g(x)的上限{ {1}})。

按照惯例,某些常量f(x)的{​​{1}}只是O(k)因为我们不关心常数因素。

请注意,下限是未知的,理论上最少,因为我们对k函数的下限一无所知。我们知道O(1)O(n^2)因为f(x) = Omega(h(x))。虽然在实践h(x) <= 1f(x) = O(1),但h(x) = 1可以使用少于常数时间函数in theory

所有这一切意味着通过强制函数的常量上限,函数现在具有紧束缚:f(x) = Omega(1)