繁体   English   中英

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

[英]Is it O(n^2) or O(1)?

这种独特的字符串函数的执行时间是否比单纯的O(n ^ 2)方法减少了?

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

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

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

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

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

如果SOME_THRESHOLD是常数,则您已对函数的增长进行了硬编码f(x) = O (g(x))f(x) = O (g(x))给出了g(x)f(x) )。

按照惯例,某些常数k O(k)只是O(1)因为我们不在乎常数因子。

请注意,至少从理论上讲,下界是未知的,因为我们对O(n^2)函数的下界一无所知。 我们知道对于f(x) = Omega(h(x))h(x) <= 1因为f(x) = O(1) 尽管实际上h(x) = 1 ,所以f(x) = Omega(1) ,但理论上少于恒定时间的函数是可能的。

这意味着通过在函数上施加一个恒定的上限,该函数现在具有一个严格的边界: f(x) = Theta(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM