我很难理解算法的对数复杂性。
例如
for(int j=1; j<=n; j*=2){
...
}
其复杂性为O(log 2 N)
那么如果它是j*=3
怎么办?那么复杂性将是O(log 3 N)?
答案 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)。