Big o 算法分析
所以我了解一点算法分析,但我完全不知道如何做这个。有人能给我解释一下吗?这是O(logn)吗Big o 算法分析,big-o,Big O,所以我了解一点算法分析,但我完全不知道如何做这个。有人能给我解释一下吗?这是O(logn)吗 for(int i=1;i
for(int i=1;i
这实际上是O(n)
您可以按如下方式计算:
- 操作数是系列2、4、8、16、32…的总和。。。。。。就在
之前停止李>n
- 该几何级数的和大约在
到n
的范围内李>2n
- 因此,整个算法是
,因为可以忽略常数因子O(n)
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++)