【问题标题】:Time Complexity of Dependent Nested Loop依赖嵌套循环的时间复杂度
【发布时间】:2014-09-19 15:41:28
【问题描述】:
嗨,我一直试图了解这个嵌套循环的时间复杂度有一段时间了。
int i = 1;
while(i < n) {
int j = 0;
while(j < n/i){
j++;
}
i = 2 * i;
}
根据我所做的几次计算,我认为它的大 O 表示法是 O(log(n)),但我不确定这是否正确。我尝试寻找一些示例,其中内部循环以这种速度加速,但我找不到任何东西。
谢谢
【问题讨论】:
标签:
nested
big-o
complexity-theory
【解决方案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)...