以下代码的时间复杂度是多少

时间:2018-10-16 02:21:27

标签: time-complexity

以下代码的时间复杂度是多少?在第二个for循环中,j递增j = j * 2

`int k=0;
 for(i=1;i<=n;i++)
     for(j=1;j<n;j=j*2)
         k=k+1;
 return k;`

1 个答案:

答案 0 :(得分:2)

这两个循环是独立的,因为两者都不依赖于另一个。因此,我们可以将两个嵌套循环的复杂度表示为单个复杂度的乘积。在这种情况下,i中的外部循环为O(n),而j中的内部循环为O(lgn)n的对数底数2)。因此,总时间为O(nlgn)

要了解为什么内部循环为O(lgn),请考虑值为n的16:

j  | step#
1  | 1
2  | 2
4  | 3
8  | 4
16 | 5

我们可以看到,生成16位代码花了5个步骤,大约为lg(16)