以下代码的时间复杂度是多少?在第二个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;`
答案 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)
。