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

依赖于外部循环的嵌套循环的时间复杂度

缪坚诚
2023-03-14

这是一个正常的嵌套循环,具有n^2复杂性

for i in range(n):
    for j in range(n): # <-- dependent on n
        print(i,j)

我很难理解为什么下一个循环也有n^2复杂性,即使它打印的语句更少

for i in range(n):
   for j in range(i): # <-- now it is dependent on i
       print(i,j)

有什么想法吗?

共有1个答案

祁俊喆
2023-03-14

让我们计算最里面的表达式执行的次数,所以我们这样说:

  • i=0;j=0;最内层执行:0次
  • i=1;j=0,1;最内层执行:1次
  • i=2;j=0,1,2;最内层执行:2次
  • i=3;j=0,1,2,3;最内层执行:3次
  • i=n;j=0,1,2。。。,N最内层执行:n次

(对于j-loop,终止条件用粗体突出显示。当j-loop到达它时,最里面的表达式将不会被执行,我们将开始i-loop的下一次(如果有)迭代。)

因此,我们将有13。。。n。这是1/2(n*(n1)),这是n^2。因此,时间复杂度仍然是n^2。

 类似资料:
  • 我有一个嵌套的for循环: 如何找到这个循环的时间复杂度。 我在考虑外部循环,它从0运行到n^2(独占),所以它运行n^2 1次。 对于内部循环,它取决于i,这就是我迷失的地方。有什么指示吗?

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

  • 这段代码的时间复杂度是多少?外循环运行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值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?

  • 对于下面的循环, 时间复杂度是多少,我应该怎么想?我的猜测是外环总共运行。内环运行次。因此,时间复杂度应该是。 我说得对吗? 提前感谢。