Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算BigOh,迭代除法_Java_Algorithm_Big O - Fatal编程技术网

Java 计算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;

有一个硬件分配来计算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;
对于(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)
to
2(n^2)logn
to
O(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)
to
2(n^2)logn
to
O(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的前几个值,你会看到这种模式。