Algorithm 嵌套for循环的时间复杂度
以下示例循环的时间复杂度为O(n^2) 谁能解释一下为什么是O(n^2)?因为它取决于c的值 回路1---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表示
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
}
}