当前位置: 首页 > 知识库问答 >
问题:

嵌套循环每次变化的算法复杂度

连昊天
2023-03-14

我必须说明以下两种算法的复杂性:

for ( i=1; i < n; i *= 2 ) {
  for ( j = n; j > 0; j /= 2 ) {
    for ( k = j; k < n; k += 2 ) {
      sum += (i + j * k );
    }
  }
}
for( int i = n; i > 0; i-- ) {
  for( int j = 1; j < n; j *= 2 ) {
    for( int k = 0; k < j; k++ ) {
       ... // some operation
    }
  }
}

共有1个答案

弘和同
2023-03-14

正如您所说,外部循环是log(n),其参数i不用于内部循环。对于另外两个内部循环:

 value of j    iteration number of the most inner loop
 j = n;        k: 0 
 j = n/2;      k: (n - n/2)/2
 j = n/4;      k: (n-n/4)/2

因此,和是((1-1/2)+(1-1/4)+(1-1/8)+...+(1-1/2^log(n)))n/2=(log(n)-c)*n/2=Theta(n log(n))。因此,总复杂度为n(log(n))^2

 类似资料:
  • 请考虑以下算法- 时间和空间的复杂性是如何被发现的?

  • 我很难理解算法分析,尤其是下面的例子: 所以我的理解是,外循环是,当我乘以一个常量时,我不确定是否有任何区别。 不过,最让我困惑的是内部循环。我认为它是,因为j被常数递减,但我不确定和

  • 我在计算时间复杂度时遇到困难,尤其是while循环: 示例1: 时间复杂度是O(n x 3 x r)还是O(3)? 示例 2: 时间复杂度会是O(3 x n)还是O(3)?

  • 这段代码的时间复杂度是多少?外循环运行n次,但我不确定内循环。如果内环对于i的每个值一直运行到n,它能是O(n^2)吗?

  • 我的困惑是- 如果我把n+(n^2-1)*O(1)写成n+O(1)+O(1)+........+O(1),那么我可以忽略低阶项,复杂性将是O(n),但是另一个推理可以是一个常数的工作量正在做n^2次,所以时间复杂性应该是O(n^2) 在这个问题中也发生了类似的事情-带有if语句的嵌套循环的时间复杂度O(N):O(N^4)?

  • 以下示例循环的时间复杂度为O(n^2),有人能解释为什么是O(n^2)吗?因为这取决于c的价值。。。 循环1--- 回路2--- 如果c=0;然后它运行无限次,就像增加c值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?