算法的对数复杂度

时间:2013-07-01 02:43:36

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

我很难理解算法的对数复杂性。

例如

for(int j=1; j<=n; j*=2){
    ...
}

其复杂性为O(log 2 N)

那么如果它是j*=3怎么办?那么复杂性将是O(log 3 N)?

2 个答案:

答案 0 :(得分:7)

只要循环体为O(1),就可以说是。

但是,请注意log 3 N = log 2 N / log 2 3,因此它也是O(log 2 N),因为常数因素无关紧要。

另请注意,从该参数可以看出,对于任何固定常量k,O(log k N)也是O(log 2 N) ,因为您可以用3替换k

答案 1 :(得分:0)

基本上,是的。 我们假设你的for循环看起来像这样:

for (int j = 1; j < n; j *= a) {...}

其中a是一些常量。 如果for循环执行k次,那么在最后一次迭代中,j将等于 k 。并且由于N = O(j)且j = 0(a k ),因此N = O(a k )。由此得出k = O(log a N)。再次,for循环执行k次,因此该算法的时间复杂度为O(k)= O(log a N)。