Big o 算法分析

Big o 算法分析,big-o,Big O,所以我了解一点算法分析,但我完全不知道如何做这个。有人能给我解释一下吗?这是O(logn)吗 for(int i=1;i

所以我了解一点算法分析,但我完全不知道如何做这个。有人能给我解释一下吗?这是O(logn)吗

for(int i=1;i
这实际上是
O(n)

您可以按如下方式计算:

  • 操作数是系列2、4、8、16、32…的总和。。。。。。就在
    n
    之前停止
  • 该几何级数的和大约在
    n
    2n
    的范围内
  • 因此,整个算法是
    O(n)
    ,因为可以忽略常数因子

要找到嵌套循环中的大O,需要执行以下示例中的步骤

例如,让我们:

n = 10
现在外部循环执行3次,即:

i=2,4 and 8
对于每个迭代,内部循环执行3次,如

i=2 it iterates 2 times
i=4 it iterates 4 times
i=8 it iterates 8 times
所以总的迭代次数小于2*n,这使得它是O(2n),我们可以忽略常数因子,所以它的大O是

O(n)

我将首先计算little-o以便您了解整个过程,然后我们将从中得到big-o

让我们把它分成几个部分:

for (int i=2; i < n; i*=2)
j=0
1

j++
j={0,1,2,3,4,5,6,7,8……}所以j=n然后它就变成了2n+1

最后我们得到小o等于:

(2n+1)*(2log2(n)+1)

4nlog2(n)+2n+2log2(n)+1

log2(n)(4n+2)+2n+1

结果是o(log2(n)(4n+2)+2n+1),为了得到大o,我们可以在忽略某些因素的情况下减少该表达式,然后:

O(log2(n)n)

希望它足够清楚明白


关于。

正式而言,您可以按照以下方式进行操作:


但当我们考虑内循环时,这不会导致O(n ^ 2)吗?自1+2+…+n是O(n^2),您可以尝试对每个循环的每个
i
求和。例如。2+4+8+16等。。。总和将始终介于1/2 n和2 n之间。如果n=4,则所有i的总和等于2。如果n=129,那么所有i的和等于254。这个和不是O(n^2)
-你需要做一个几何级数的和。如果它是一个算术级数,它将是O(n^2),但这里不是这样。
for (int i=2; i < n; i*=2)
for (int j=0; j < i; j++)