Java 这个三重嵌套for循环的运行时间是多少?
代码如下:Java 这个三重嵌套for循环的运行时间是多少?,java,time-complexity,Java,Time Complexity,代码如下: for (int i = 0; i < 60; i++) { for (int j = i-1; j < N; j++) { for (int k = 0; k+2 < N; k++) { System.out.println(i*j); System.out.println(i); i=i+1;
for (int i = 0; i < 60; i++) {
for (int j = i-1; j < N; j++) {
for (int k = 0; k+2 < N; k++) {
System.out.println(i*j);
System.out.println(i);
i=i+1;
}
}
}
for(int i=0;i<60;i++){
对于(int j=i-1;j
我相信它是O(N^2),因为for循环中有两个N,但不太确定。
感谢您的帮助,谢谢 这是因为
i
-循环有一个固定的限制。在我看来,说它是O(N^2)并没有错,但如果我们严格,那么复杂性就是O(N^2*log(N))
我们可以更正式地证明这一点:
首先,让我们去掉分析中的i
-循环。i
的值在k
-循环中递增。当N
较大时,i
将在第一次迭代中大于60
,因此i
-循环将只执行一次迭代。为简单起见,假设i
只是一个用0
初始化的变量。现在代码是:
inti=0;
对于(intj=-1;j
如果我们非常严格,那么我们必须考虑不同的情况,i
-循环执行不止一次,但只有当N
很小时,这不是我们对大O感兴趣的。为了简单起见,让我们先忘掉i
-循环
我们先看循环,然后说内部语句是常数。我们分开来看
我们可以看到循环的复杂性是O(N^2)
现在是语句:有趣的是打印语句。打印一个数字显然是一个数字一个数字地完成的(简单地说),所以它不是常数。数字的位数随数字的对数增长。有关详细信息,请参阅。最后一个语句是常量
现在我们需要(粗略地)看看这些数字。i
的值增长为N*N
。j
的值增长为N
。因此,第一次打印打印的数字会增长到N*N*N
。第二次打印打印的数字增长到N*N
。因此,内体具有复杂性O(log(N^3)+log(N^2)),也就是O(3log(N)+2log(N)),也就是O(5log(N))。常量因子在大O中被删除,因此最终的复杂性是O(log(N))
将循环的复杂性和执行体的复杂性结合起来,得到总体复杂性:O(N^2*log(N))
询问您的老师是否应该考虑打印语句。这是因为
i
-循环有一个固定的限制。在我看来,说它是O(N^2)并没有错,但如果我们严格,那么复杂性就是O(N^2*log(N))
我们可以更正式地证明这一点:
首先,让我们去掉分析中的i
-循环。i
的值在k
-循环中递增。当N
较大时,i
将在第一次迭代中大于60
,因此i
-循环将只执行一次迭代。为简单起见,假设i
只是一个用0
初始化的变量。现在代码是:
inti=0;
对于(intj=-1;j
如果我们非常严格,那么我们必须考虑不同的情况,i
-循环执行不止一次,但只有当N
很小时,这不是我们对大O感兴趣的。为了简单起见,让我们先忘掉i
-循环
我们先看循环,然后说内部语句是常数。我们分开来看
我们可以看到循环的复杂性是O(N^2)
现在是语句:有趣的是打印语句。打印一个数字显然是一个数字一个数字地完成的(简单地说),所以它不是常数。数字的位数随数字的对数增长。有关详细信息,请参阅。最后一个语句是常量
现在我们需要(粗略地)看看这些数字。i
的值增长为N*N
。j
的值增长为N
。因此,第一次打印打印的数字会增长到N*N*N
。第二次打印打印的数字增长到N*N
。因此,内体具有复杂性O(log(N^3)+log(N^2)),也就是O(3log(N)+2log(N)),也就是O(5log(N))。常量因子在大O中被删除,因此最终的复杂性是O(log(N))
将循环的复杂性和执行体的复杂性结合起来,得到总体复杂性:O(N^2*log(N))
询问你的老师是否应该考虑打印语句。答案是O(N^2 log N)
首先,外部循环可以忽略,因为它有一个恒定的迭代次数,因此只由一个恒定的因子贡献。而且,i=i+1
对时间复杂度没有影响,因为它只操纵外部循环
println(i*j)
语句的时间复杂度为O(bitlength(i*j))
,它以O(bitlength(N^2))=O(logn^2)=O(logn)
为界(对于另一个println
语句也是如此)。现在,这些println
语句执行的频率是多少
这两个内部循环是嵌套的,并且都从一个常数运行到N
中的线性部分,因此它们迭代O(N^2)
次。因此总时间复杂度为