Java Nested For循环运行时分析

时间:2015-02-03 08:14:16

标签: java algorithm runtime analysis

说我有以下for循环:

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

外循环将运行log(n)次,我的问题是内循环将运行多少次。对于某些j,我们可以将s近似为2 s ,并且当2 s &lt;对于某些r,我可以再次近似为2 r 。如果我们记录双方的日志,我们得到s&lt; r,这是第二个for循环停止的时候。基于此,我们可以说内循环运行不变吗?并且该函数运行的总次数仅为log(n)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

一句话答案是:记录 2 (n) 2

<强>证明

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

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

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