计算BigOh,迭代除法

时间:2013-10-02 22:17:19

标签: java algorithm big-o

有一个HW分配来计算BigOh,但我循环中的迭代给了我一些问题。

The Loop:

public static int fragment4b(int n){
    int sum = 0;
    for(int i = 1; i <= n*n; i++)         
        for(int j = i; j>= 1; j /=2)        
            sum +=j; 
}

我理解外部循环有O(n * n),但我觉得我的内心有问题

所以我得到内环有O((ln(i)/ ln(2))+ 1) 这似乎对吗?或者我咆哮错误的树

2 个答案:

答案 0 :(得分:3)

内部循环正好重复sum+= j语句enter image description here

并且外环重复这个N ^ 2次。

所以操作总数是从1到N ^ 2的内部循环的总和,如下所示:enter image description here

,那是enter image description here

编辑:在记录日志时,请发言。

答案 1 :(得分:2)

我会按如下方式计算运行时间:

T = log1 + log2 + log3 + ... + log(n^2)

在上面的公式中,第一项是外循环第一次迭代的运行时间,第二次迭代的第二项,依此类推。

很明显:

T < log(n^2) + log(n^2) + ... + log(n^2) = 2(n^2)logn = O(n^2logn))

因此,运行时间受O(n^2logn)限制。