该循环的时间复杂度O(n ^ 2)如何?
for (int i = n; i > 0; i -= c)
{
for (int j = i+1; j <=n; j += c)
{
// some O(1) expressions
}
}
有人可以解释吗?
答案 0 :(得分:0)
假设
n > 0
c > 0
第一个循环
第一个循环从i=n
开始,在每个步骤中,它都从c
中减去i
。一方面,如果c
大,则第一个循环将仅重复几次。 (请尝试使用n=50
,c=20
,)。另一方面,如果c
小(假设c=1
),则它将迭代n
次。
第二循环
第二个循环是相同的推理。如果c
大,则仅迭代几次,如果c
小,则迭代多次,最糟糕的情况是n
次。
组合/大O
Big O标记为算法的upper bound
提供了time complexity
。在您的情况下,第一和第二循环上限相结合,它为您提供了O(n*n)=O(n^2)
。