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值得一提