有一个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) 这似乎对吗?或者我咆哮错误的树
答案 0 :(得分:3)
内部循环正好重复sum+= j
语句
并且外环重复这个N ^ 2次。
所以操作总数是从1到N ^ 2的内部循环的总和,如下所示:
,那是
编辑:在记录日志时,请发言。
答案 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)
限制。