根据此代码:
for (int i=1; i<=N; i*=2)
{
for (int j=1;j<=i;j++)
{
System.out.println("The value for i is "+i+" and the value for j is "+j);
}
}
第一个for-loop
将运行log(n)
次,
起初我想到2n-1
为第二个for-loop
,但它不适用于奇数。
有什么想法吗? :)
答案 0 :(得分:4)
i = 1
时,内部循环将运行1次i = 2
时,内循环将运行2次i = 4
时,内循环将运行4次i = N
时,内循环将运行N次 print语句执行1 + ... + N/4 + N/2 + N
次,即O(n)。
答案 1 :(得分:2)
你的第一个for循环已经i
作为一个系列:
当此系列的最后一个元素为biger或等于N时,第一个循环停止:
x
代表第一次循环执行的次数。现在我们正试图找到x
:
,其中
是的,就像你说的那样:
第一个for循环将运行log(n)次
第二个for循环体作为总和运行:
证明您的算法具有O(n)复杂度
如果N是2N-1
1, 2, 4, 8, ... , 2^n
次
这是表面分析,但它可以完成工作。