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

各种嵌套for循环的TIME复杂度

卫烨烁
2023-03-14

如果循环变量除以常量,则循环的时间复杂度被认为是O(Logn)。

循环1----

 for (int i = 1; i <=n; i *= c) 
{
   // some O(1) expressions
}

循环2-----

  for (int i = n; i > 0; i /= c) 
 {
   // some O(1) expressions
 }

如果循环变量以指数方式减少/增加一个常量,则循环的时间复杂度被视为O(logn)。

Here c is a constant greater than 1   

环路3----

for (int i = 2; i <=n; i = pow(i, c)) 
{ 
    // some O(1) expressions
}

回路4-----

 ////Here fun is sqrt or cuberoot or any other constant root
 for (int i = n; i > 0; i = fun(i)) 
{ 
   // some O(1) expressions
}

有人能通过考虑内部循环在这些循环中执行的次数来解释为什么会这样吗?

如果循环1和循环2中的c=1,那么它将无限次地运行,但它被给出对数时间为什么?

循环3和循环4中的O(logn)是怎样的?

共有1个答案

毋玺
2023-03-14

如果循环1和循环2中的c=1,那么它将无限次地运行,但它被给出对数时间为什么?

是的,你是对的,如果c=1,那么我们将得到情况1和情况2的无限循环,因此条件“c是大于1的[n整数]常数”对于情况1和情况2也是必要的,以便得到O(logn)复杂度。

对于情况1,请注意i接受值1,c,c2,c3,...,clogc(n),因此总共有log(n)多次迭代,并且对于每个迭代都有恒定的工作量要完成(即O(1)工作量),因此完成的总工作量为log(n)*O(1)=O(log(n))

类似地,对于情况2,i取值n,n/c,n/c2,n/c3。。。,n/clogc(n),因此总共有log(n)多次迭代,每次迭代需要恒定的时间,因此总时间复杂度为O(log(n))

对于情况3,i取值2,2c,(2cc=2c2,(2c2c=2c3。。。,2clogc(log(n))。最后一项必须小于或等于n,我们有2clogc(log(n))=2log(n)=n,这证明了我们上一项的价值。因此,总共有logc(log(n))多次迭代,每次迭代都需要一定的时间来运行,因此总的时间复杂度是O(log(n))

类似地,对于情况4,i取值n,n1/c,(n1/c1/c=n1/c2,n1/c3。。。,n1/clogc(log(n)),所以总共有logc(log(n))迭代,每次迭代都需要时间O(1),所以总的时间复杂度是O(log(log(n))

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

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

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

  • 这个问题是为了修改过去的试卷,如果我走上了正确的道路,我需要一些建议。 求出下面一段代码的时间复杂度,表示给定整数n的操作次数: 所以我认为外循环是,第一个内环是,第二个内环是。我只是想知道我是否有一个大致的想法,以及如何从这里继续前进。

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

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