这个算法是O(1)吗?

时间:2014-09-19 02:43:57

标签: complexity-theory

下面的算法是简单的O(1),还是它的复杂性难以定义?

for (i = 0; i < n; ++i)
    if (i > 10)
        break;

当n <= 10时显然是O(n),我感到很困惑。

2 个答案:

答案 0 :(得分:5)

它是O(1)因为无论输入(n)的大小如何都需要恒定的时间。当n <= 10时,将其称为O(n)是没有意义的,因为大哦符号是根据渐近函数增长来定义的,即,对于n“大”,或者大于某个值。这是因为n的实际值与渐近复杂度无关:它是一种将不同算法相互比较的方法。

只要看看大{0}的definition:函数f(n)是O(g(n)),如果存在常数c> 0且正整数m使得f( n)&lt; c * g(n),n> m。在你的情况下,f(n)是运行算法所需的时间,g(n)= 1,m = 10,c与循环10个整数所用的时间成正比。

答案 1 :(得分:2)

是的,它是O(1)。它等同于说函数是O(1)并且说它是有界的。该代码的运行时间是有界的,因此它是O(1)。