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
Algorithm 大O整数和运行时_Algorithm_Big O - Fatal编程技术网

Algorithm 大O整数和运行时

Algorithm 大O整数和运行时,algorithm,big-o,Algorithm,Big O,我一直在努力学习大O,对我刚刚遇到的一个算法感到困惑。算法是: void pairs(int[] array){ for (int i=0; i < array.length; i++){ for (int j=i+1; j<array.length; j++){ System.out.println(array[i]+","+array[j]); } } } void对(int[]数组){ for(int i=0;i

我一直在努力学习大O,对我刚刚遇到的一个算法感到困惑。算法是:

void pairs(int[] array){
  for (int i=0; i < array.length; i++){
    for (int j=i+1; j<array.length; j++){
      System.out.println(array[i]+","+array[j]);
    }
  }
}
void对(int[]数组){
for(int i=0;i对于(int j=i+1;j您的错误是将第二个循环计算为
O(1/2n^2)

首先,您可以清楚地看到它被限制为
N-1
(当j=0时)

第一个循环显然是
N

第二个循环的最大值为
N-1

在此之前,O(N^2)

如果我们再仔细检查一下, 当
i=0

然后
N-2
对于
i=1

对于
i=n-1
,只需一次

这是
1/2n(n-1)
=
1/2n^2-1/2n
=
O(n^2)


注意这也包括外循环的所有迭代!

当你说内循环是
O(1/2*n(n+1))
时,你实际上是在描述两个循环的big-O复杂性

也就是说,外循环具有复杂性O(N)基本上意味着它的主体运行N次。但是为了计算内循环的复杂度,你已经考虑了外循环的所有迭代,因为你把内循环在外循环的所有迭代中运行的次数加起来。如果你再乘以N,你会说外循环本身是重新运行的第N次


换句话说,您的分析表明,内部循环体(
System.out.println
call)的运行次数是总次数的
1/2*n(n+1)
倍。这意味着两个循环组合的总复杂度是
O(1/2*n(n+1))=O(n^2)
。两个循环组合的总体复杂性描述了最里面的代码运行了多少次。

这不是有效的Python代码。@BrenBarn是的,我销毁了那一个。我把它放回Java。为什么你认为第二个循环是1/2*n(n+1)?@BrenBarn首先运行j,执行n-1步,然后是n-2步,然后是n-3步,等等。看起来像(n-1)+(n-2)+(n-3)+…+2+1。整数1到n-1的和是1/2*n*(n+1)。我想。我的数学有点生疏。如果你已经考虑了从外循环开始的所有运行,为什么还要再乘以
O(n)