这些循环1和2的时间复杂度是多少

时间:2015-09-12 06:47:50

标签: algorithm time-complexity

我正在阅读一篇关于非常受欢迎的网站(下面给出的链接)的循环时间复杂度分析的文章,根据该文章,下面第1和第2循环的时间复杂度是O(1)和O(n)分别。 但我认为两个循环的时间复杂度是相同的O(n)

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

我的推理:`c * n = O(n)

  

在通过下面的答案之后,我的推理是错误的,因为没有变化的输入n。循环运行是固定的c次。因此,无论输入值n如何,循环都将运行恒定时间。所以O(1)复杂性

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

我的推理:c*n=O(n)

我错过了什么吗?如果有人可以提供帮助和解释,我将不胜感激

这是文章的链接:http://www.geeksforgeeks.org/analysis-of-algorithms-set-4-analysis-of-loops/

4 个答案:

答案 0 :(得分:3)

  

运行常数次数的循环或递归也是   被视为O(1)。

此处:C是一个常量值。所以基本上,无论n

的值如何,您都在执行恒定的操作次数
   // Here c is a constant   
   for (int i = 1; i <= c; i++) {  
        // some O(1) expressions
   }

同样在第二圈:

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

您的原因c*n = O(n) 不正确。这里 按C增加。对于n元素,循环发生n/c渐近O(n/c) ~ O(n)

答案 1 :(得分:2)

  

for(int i = 1; i&lt; = c; i ++){// some O(1)expressions}

此处c是常量。所以基本上,无论n的值如何,您都在执行恒定的操作次数。这就是为什么它被视为常数复杂性O(1)

  

for(int i = 1; i&lt; = n; i + = c){// some O(1)expressions}

您正在使用输入值n进行循环,该值基本上随程序或算法的给定输入而变化。现在,c也是一个常量,对于n的所有不同值,它将保持不变。复杂性被视为O(n)

  

for(int i = 1; i&lt; = n; i ++){// some O(1)expressions}

这与上述内容相同,只是c的值为1

所有复杂性都以渐近符号格式表示。 常数因子将被删除,因为无论n的值如何,它们都是相同的。

答案 2 :(得分:1)

1)图片中没有n,我不知道为什么你认为O(n)loop来自1 to c,因此其O(c)c是常量,复杂度为O(1)

2)循环从1开始直至n,每步增加c。显然,复杂性为O(n/c),渐近为O(n)

答案 3 :(得分:0)

O(1):此循环的复杂性为O(1),因为它运行恒定的时间c。

// Here c is a constant   
   for (int i = 1; i <= c; i++) {  
        // some O(1) expressions
   }

O(n):如果循环的增加或减少恒定量,则循环的复杂度为O(n)。例如,这些循环具有O(n)时间复杂度。

// Here c is a positive integer constant   
   for (int i = 1; i <= n; i += c) {  
        // some O(1) expressions
   }

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