Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 嵌套for循环的时间复杂度_Algorithm_Loops_Big O_Time Complexity_Nested Loops - Fatal编程技术网

Algorithm 嵌套for循环的时间复杂度

Algorithm 嵌套for循环的时间复杂度,algorithm,loops,big-o,time-complexity,nested-loops,Algorithm,Loops,Big O,Time Complexity,Nested Loops,以下示例循环的时间复杂度为O(n^2) 谁能解释一下为什么是O(n^2)?因为它取决于c的值 回路1--- for(int i=1;i这些代码的每一部分都需要一个时间O(n^2/c^2)。c在这里可能被认为是一个严格的正常数,因此O(n^2/c^2)=O(n^2)。但这一切都取决于上下文…对于每个固定的c,时间都是O(n^2)。迭代次数大致最大(n^2/c^2,n^2),除非c=0。n^2/c^2是O(n^2)对于每一个固定的n 如果您的代码在循环过程中更改了c,您可能会得到不同的答案。大O表示

以下示例循环的时间复杂度为O(n^2) 谁能解释一下为什么是O(n^2)?因为它取决于c的值

回路1---


for(int i=1;i这些代码的每一部分都需要一个时间O(n^2/c^2)。c在这里可能被认为是一个严格的正常数,因此O(n^2/c^2)=O(n^2)。但这一切都取决于上下文…

对于每个固定的c,时间都是O(n^2)。迭代次数大致最大(n^2/c^2,n^2),除非c=0。n^2/c^2是O(n^2)对于每一个固定的n


如果您的代码在循环过程中更改了c,您可能会得到不同的答案。

大O表示法是算法复杂性的相对表示。

Big-O并没有说明您的算法在任何情况下都会进行多少次迭代

它表示在最坏的情况下,您的算法将进行n次平方计算。如果您必须比较两种算法,这将非常有用

在你的代码中,如果我们假设c是一个常数,那么它可以从Big-O符号中忽略,因为Big-O是关于比较和事物如何缩放的,而常量不起作用

但是当c不是常数时,正确的大O表示法应该是O(n^2/c^2)


阅读cletus对Big-O的精彩解释。

再次阅读第二个循环!第二个循环中应该是
i-=c
?是的,很抱歉是i=i-c
 for (int i = 1; i <=n; i += c) 
 {
    for (int j = 1; j <=n; j += c) 
    {
      // some O(1) expressions
    }
 }
 for (int i = n; i > 0; i -= c) 
 {
    for (int j = i+1; j <=n; j += c)
   {
      // some O(1) expressions
   }
 }