Loops 嵌套循环的复杂性

Loops 嵌套循环的复杂性,loops,big-o,complexity-theory,nested-loops,asymptotic-complexity,Loops,Big O,Complexity Theory,Nested Loops,Asymptotic Complexity,我试图用大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


for(i=1;i编辑:我同意第一个代码块是O(n)

通过跳转2来减少外循环
i
,在内循环中运行
i
次,因此迭代次数将是小于或等于N但大于0的两个幂的总和,即nlog(N)+1-1,所以O(N)

假设
a
为常数,则第二个代码块为O(loga(n)n2)


两个最外层的循环等于所有小于或等于n的数的总和,即n(n-1)/2,所以O(n2)。最后,内部循环是小于n的上界的a的幂,即O(logan)。

考虑第一个代码片段

for(i=n ; i>1 ; i/=2) //for any size n
{
    for(j = 1; j < i; j++)
    {
      x+=a
    }
}
for(i=1 ; i<=n; i++,x=1)
{
    for(j = 1; j <= i; j++)
    {
      for(k = 1; k <= j; x+=a,k*=a)
      {

      }
    }
}

两个外部循环一起调用最里面的循环总共
n(n+1)/2次。最里面的循环最多执行
logan
次。因此,第二个代码片段的总时间复杂度为O(n2logan)

您可以按照以下方式进行:

片段1:

片段2(Pochhammer、G函数和斯特林近似)

[片段2的更新]

Johann Blieberger博士发表的“离散循环和最坏情况性能”出版物中的一些增强功能(所有情况均验证为a=2):

其中:

所以,


您在最后一段中的评论是描述您对第一个问题的想法还是第二个问题的想法?描述第一个问题的最后一段代码中没有列表,因此我假设“浏览列表”你只是说
x+=a
被执行
n
次,对吗?如果是的话,你是怎么得出这个结论的?这可能有助于你进一步解释为什么O(2log(n))
2^log\u 2(n)
只是
n
,但我认为你不在这里。我很确定它实际上是
O(n)
for(i=1 ; i<=n; i++,x=1)
{
    for(j = 1; j <= i; j++)
    {
      for(k = 1; k <= j; x+=a,k*=a)
      {

      }
    }
}