内循环如何执行“n / i”次?

时间:2018-06-12 16:58:15

标签: time-complexity big-o asymptotic-complexity

我对代码片段的时间复杂性存在疑问,并且不太了解给出的解决方案。

function (n) {
           for(int i =0 ; i < n ; i ++){
                       for(int j = 0 ; j <= n ; j += i){
                                  printf("*");
                                      }

在上面的代码中,内部循环为n/i的每个值执行i次。而且,总体时间复杂度为O(nlogn)

我无法弄清楚为什么内循环执行n/i次。有人可以帮帮我吗。

1 个答案:

答案 0 :(得分:0)

有两个循环,一个递增i,一个递增j

给定固定i,对于j循环的每次传递,j增加i,直到j到达n。< / p>

因此每次迭代中j的值为:

j
j + i
j + 2i
...
j + (n/i - j/i)i 

如您所见,这运行O(n / i)次。