用于运行时分析的Java嵌套循环

用于运行时分析的Java嵌套循环,java,algorithm,runtime,analysis,Java,Algorithm,Runtime,Analysis,假设我有以下for循环: for (int i = 1; i < n; i*=2) { for (int j = 1; j < i; j*=2) { //constant functions here } } for(int i=1;i

假设我有以下for循环:

for (int i = 1; i < n; i*=2) {
    for (int j = 1; j < i; j*=2) {
        //constant functions here
    }
 }
for(int i=1;i

外部循环将运行
log(n)
次,我的问题是内部循环将运行多少次。对于一些
s
,我们可以将
j
近似为2s,当2sr,它可以再次近似为2r。如果我们取两边的对数,我们得到s

首先忽略外循环,假设i=4,内循环将运行log(4)次,对于不同的i值,内环将运行log(i)次。现在考虑外环,i的值改变log(n)次。因此复杂性是log(n)*log(i)或仅仅是(log(n))^2

一个词的答案是:Log2(n)2

证明

考虑Log2(n)=k,我们在外循环的第一次迭代中,内循环运行
1
时间,因为
i=2
,在第二次迭代中,内循环运行
2
时间,因为
i=4
,并且。。。在外循环的第k次迭代中,内循环运行
k次
,因为i=2k,所以迭代次数为:

1 + 2 + ... + k = k(k+1)/2

所以答案是O(Log2(n)2)

i=0,所以它将成为一个无限循环,因为i*=2总是变成0对不起,我关于i和j的起始值的错误。修正了,所以他们现在都从1开始。