loops - 嵌套循环的复杂性

标签 loops big-o complexity-theory nested-loops asymptotic-complexity

我正在尝试使用 Big O 表示法计算 for 循环的复杂性。我之前在我的其他类(class)中也这样做过,但是这个比其他类(class)更严格,因为它是在实际算法上。代码如下:

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 any size n
{
    for(j = 1; j <= i; j++)
    {
      for(k = 1; k <= j; x+=a,k*=a)
      {

      }
    }
}

我发现第一个循环的复杂度为 O(n),因为它要遍历列表 n 次。至于第二个循环我有点迷茫!
感谢您对分析的帮助。每个循环都在自己的空间中,它们不在一起。

最佳答案

考虑第一个代码片段,

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

指令x+=a总共执行了 n + n/2 + n/4 + ... + 1次。

G.P. 的第一个 log2n 项的总和起始期限 n和公比1/2是, (n (1-(1/2)log2n))/(1/2) .因此第一个代码片段的复杂度是 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)
      {

      }
    }
}

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

关于loops - 嵌套循环的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743395/

相关文章:

javascript - 循环遍历数组并删除项目,而不中断 for 循环

algorithm - 如何计算大 O 表示法中的时间复杂度以进行数组双重查找

Java 字符串或对象的哈希集比较

arrays - 查找一个数字是否在排序数组中出现 n/2 次的最小复杂度

algorithm - 基本算术运算的大O复杂度

python - 将数组对象更改为字符串... TypeError : list indices must be integers, not str

c++ - 如何在 while 循环中使用 cin?

java - 你好,我正在努力理解这段代码中 if 语句的 O 表示法运行时

java - 如何重写输入循环以不包含代码重复?

algorithm - 如何使用渐近符号求解方程?