Java 计算BigOh,迭代除法
有一个硬件分配来计算BigOh,但是我循环中的迭代给了我一些问题 循环:Java 计算BigOh,迭代除法,java,algorithm,big-o,Java,Algorithm,Big O,有一个硬件分配来计算BigOh,但是我循环中的迭代给了我一些问题 循环: 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; } publicstaticintfragment4b(intn){ 整数和=0;
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;
}
publicstaticintfragment4b(intn){
整数和=0;
对于(int i=1;i=1;j/=2)
总和+=j;
}
我知道外环有O(n*n),但我觉得我的内环有问题
所以我得到内环有O((ln(I)/ln(2))+1)
这似乎是对的?或者我选错了树我会按如下方式计算运行时间:
T = log1 + log2 + log3 + ... + log(n^2)
在上面的公式中,第一项是外循环第一次迭代的运行时间,第二项是第二次迭代的运行时间,依此类推
显而易见:
T < log(n^2) + log(n^2) + ... + log(n^2) = 2(n^2)logn = O(n^2logn))
T
因此,运行时间以
O(n^2logn)
为界,我将计算运行时间,如下所示:
T = log1 + log2 + log3 + ... + log(n^2)
在上面的公式中,第一项是外循环第一次迭代的运行时间,第二项是第二次迭代的运行时间,依此类推
显而易见:
T < log(n^2) + log(n^2) + ... + log(n^2) = 2(n^2)logn = O(n^2logn))
T
因此,运行时间以
O(n^2logn)
为界,内部循环精确地重复sum+=j
语句
外部循环重复了N^2次
因此,操作总数是从1到N^2的内循环的总和,如下所示:
T = log1 + log2 + log3 + ... + log(n^2)
那就是
编辑:在记录日志时,请记录日志。内部循环准确地重复
sum+=j
语句
外部循环重复了N^2次
因此,操作总数是从1到N^2的内循环的总和,如下所示:
T = log1 + log2 + log3 + ... + log(n^2)
那就是
编辑:在记录日志时,请发言。我看不出你是如何从
log(n^2)+log(n^2)+日志(n^2)
to2(n^2)logn
toO(n^2logn))
2(n^2)logn=n^2logn@Jeff嗯,2(n^2)logn!=n^2logn
而是2(n^2)logn=O(n^2logn)
。一般来说,我们只是去掉常数项,得到大O。你可能想复习一下大O的定义:)好的,我再复习一遍,老师很快就讲完了,我因为使用了日志而迷失了方向,这是一个很大的帮助,我不明白你是如何从log(n^2)+log(n^2)+…+中得到的日志(n^2)
to2(n^2)logn
toO(n^2logn))
2(n^2)logn=n^2logn@Jeff嗯,2(n^2)logn!=n^2logn
而是2(n^2)logn=O(n^2logn)
。一般来说,我们只是去掉常数项,得到大O。你可能想复习一下大O的定义:)好的,我再复习一遍,老师很快就讲完了,由于使用了日志,我迷失了方向,这对我很有帮助。我知道我犯了错误+1对于简化的答案,你如何确定内循环重复lg(i)+1次,我计算,比如说,i=4,ln(4)+1=2.38629,但在循环中,i=4,4/2=2,i=2,2/2=1,i=1,1/2<1,所以它在i=4时运行3次,而不是2,而且我得到的越高,它似乎越不稳定,还是我又一次误会了BigO…请大家发言log@Mhd.Tahawi我仍然不确定你是如何确定循环重复lg(I)+1次告诉我们这些信息的?在你的问题中,你写道:内循环是O((ln(I)/ln(2))+1)ln(I)/ln(2)=lg(2)检查的一种方法是尝试I的前几个值,你会看到模式,我知道我在哪里犯了错误+1对于简化的答案,你如何确定内循环重复lg(i)+1次,我计算,比如说,i=4,ln(4)+1=2.38629,但在循环中,i=4,4/2=2,i=2,2/2=1,i=1,1/2<1,所以它在i=4时运行3次,而不是2,而且我得到的越高,它似乎越不稳定,还是我又一次误会了BigO…请大家发言log@Mhd.Tahawi我仍然不确定你是如何确定循环重复lg(I)+1次告诉我们这些信息的?在你的问题中,你写道:内循环是O((ln(I)/ln(2))+1)ln(I)/ln(2)=lg(2)检查的一种方法是尝试I的前几个值,你会看到这种模式。