您好我一直试图了解这个嵌套循环的时间复杂性现在已经有一段时间了。
int i = 1;
while(i < n) {
int j = 0;
while(j < n/i){
j++;
}
i = 2 * i;
}
根据我已完成的几项计算,我认为它的Big O表示法是O(log(n)),但我不确定这是否正确。我试过寻找一些内圈以这个速度加速的例子,但我找不到任何东西。
由于
答案 0 :(得分:1)
在计算复杂性时,很少有人使用的一个信息是:术语总和等于平均值乘以术语数量。换句话说,您可以用平均值替换更改的术语,并获得相同的结果。
因此,您的外部while
循环重复O(log n)次。但是内部while
循环重复:n,n / 2,n / 4,n / 8,...,1,这取决于外部while
的哪一步是我们。但是(n,n / 2,n / 4,...,1)是几何级数,有log(n)项,比率为1/2,和为n。(1-1 / n)/( 1/2)= 2n-2 \ in O(n)。因此,它的平均值是O(n / log(n))。由于它重复O(log(n))次,整个复杂度为O(log(n)* n / log(n))= O(n)......