C 嵌套循环的复杂性除以2

C 嵌套循环的复杂性除以2,c,loops,big-o,C,Loops,Big O,我试图用大O表示法来计算for循环的复杂性。我以前在我的其他课程中也做过,但是这个课程比其他课程更严格,因为它是基于实际的算法。代码如下: for(i=n ; i>1 ; i/=2) //for any size n { for(j = 1; j < i; j++) { x+=a } } for(i=n;i>1;i/=2)//对于任意大小的n { 对于(j=1;j

我试图用大O表示法来计算for循环的复杂性。我以前在我的其他课程中也做过,但是这个课程比其他课程更严格,因为它是基于实际的算法。代码如下:

for(i=n ; i>1 ; i/=2) //for any size n
{
    for(j = 1; j < i; j++)
    {
      x+=a
    }
}
for(i=n;i>1;i/=2)//对于任意大小的n
{
对于(j=1;j

我已经知道第一个循环是O(log_2(n))。至于第二圈,我有点迷路了!感谢您在分析中的帮助。

内部循环的总迭代次数为n+n/2+n/4+…+1,约为2n。所以复杂性是O(n)

复杂性应该是
O(n)
。它形成一个几何级数(不是精确的,而是近似的)

循环为
n+n/2+n/4++1
约为
2n


O(2n)=O(n)

要正式解决算法的时间复杂度,可以使用以下步骤和Sigma表示法:


另外,看一看Jauhar博士非常有趣的这张幻灯片的最后一张。

你怎么能简化总和
n+n/2+n/4+…
?@OliCharlesworth我不明白
n+n/2+n/4+…
等于
nlogn
@Rüppell's文化:它不简单。@Rüppell's文化:大概是因为有些人认为(不正确)这是正确的答案。@OliCharlesworth如果它是
O(n)
,那么它也是
O(n*logn)
,所以这没有错。