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

两个嵌套for循环的时间复杂度

赫连心思
2023-03-14

这个问题是为了修改过去的试卷,如果我走上了正确的道路,我需要一些建议。

求出下面一段代码的时间复杂度T(n),表示给定整数n的操作次数:

for ( int k = n; k >0; k /= 3 ) {
  for ( int i = 0; i < n; i += 2 ) {
     // constant number C of elementary operations
  }
  for ( int j = 2; j < n; j = (j*j)) {
      // constant number C of elementary operations
  }
}

所以我认为外循环是O(logn),第一个内环是O(n),第二个内环是O(logn)。我只是想知道我是否有一个大致的想法,以及如何从这里继续前进。

共有1个答案

杭涵映
2023-03-14

几天前,有一个类似的问题,我提供了复杂性分析的逐步描述:https://stackoverflow.com/a/49093954/926701

  • 外环确实是O(log3(n))
  • 第一个内部循环实际上是O(n)
  • 第二个内部循环是O(log2(log2(n))

非正式地说,对于第二个循环,j(k)for循环的j索引所取的值序列,我们可以写:

j(1) = 2, j(2) = j(1)^2 = 4, j(3) = j(2)^2 = 16, ..., j(k) = j(k-1)^2 >= n 
=> j(k) = j(k-1)^2 = j(k-2)^4 = ... = j(1)^(2^k) = 2^(2^k)
=> k = log2(log2(n))

由于内部循环中的操作数与外部循环中的操作数无关,因此我们可以将复杂性倍增:

T(n) = O(log3(n) * (n + log2(log2(n))))
     = O(n.log3(n))

因为log2(log2(n))

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

  • 有三个嵌套的循环,如果循环增量为1,我可以找到复杂性,但是如果循环增量像这样i=c,我就糊涂了? 第三个for循环的复杂度是m,但第一个for循环的复杂度是n/c,第二个for循环的复杂度是n==

  • 我正在努力找到确切的答案 我知道外环运行了n次。然后,第二个循环每次运行的次数不同,因为它从i开始: n(n-1)(n-2)。。。2 1. 但是,因为我们只关心最坏的情况(当i=n时),所以第二个循环将运行n-n次,因为它将从i=n开始。这当然没有意义,但这就是我被卡住的地方。我已经运行了这段代码,找到了序列的前四个元素:S=0 1 4 10。。。(其余部分不确定)。 抱歉,如果这不合理,但任何帮

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

  • 如果我通过两个嵌套的For循环进行输入 外环的复杂度是O(X),但是我对内环的时间复杂度感到困惑,因为Y是可变的。

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