Java 什么';下面代码的复杂性是多少?
根据这一准则:Java 什么';下面代码的复杂性是多少?,java,algorithm,math,complexity-theory,time-complexity,Java,Algorithm,Math,Complexity Theory,Time Complexity,根据这一准则: 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(int i=1;i 当i=1时,内部循环将运行1次 当i=2时,内部循环将运行2次 当i=4时,内部循环将运行4次 当i=N时,内部循环将运行N次 print语句被执行1+…+
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(int i=1;i
- 当
i=1
时,内部循环将运行1次
- 当
i=2
时,内部循环将运行2次
- 当
i=4
时,内部循环将运行4次
- 当
i=N
时,内部循环将运行N次
print语句被执行1+…+N/4+N/2+N
次,即O(N)。您的第一个for循环将i
作为一个系列:
当此系列的最后一个元素大于或等于N时,第一个循环停止:
x
表示第一个循环执行的次数。现在我们正在尝试查找x
:
在哪里
是的,正如你所说:
第一个for循环将运行日志(n)次
第二个for循环体作为总和运行:
证明您的算法具有O(n)复杂度
如果N是下列其中一项,则打印次数为2N-1
:1,2,4,8,…,2^N
它只是表面上的分析,但却起到了作用。它是第一个循环执行的次数(log(n)
)乘以第二个循环执行的次数(i
)。你想要渐近复杂度还是迭代次数?渐近是n*log(n)我需要考虑任何一行的迭代次数,然后找到O表示法。O(n)
是正确的,但是这个证明(这种形式的证明)只适用于2^n-1
@DmitryGinzburg,从上到下按2的下一次幂进行边界将行。@G.Bach值得一提