这个循环的时间复杂度O(n ^ 2)如何?

时间:2018-12-14 04:19:22

标签: c for-loop data-structures time-complexity complexity-theory

该循环的时间复杂度O(n ^ 2)如何?

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

有人可以解释吗?

1 个答案:

答案 0 :(得分:0)

假设

n > 0
c > 0

第一个循环

第一个循环从i=n开始,在每个步骤中,它都从c中减去i。一方面,如果c大,则第一个循环将仅重复几次。 (请尝试使用n=50c=20,)。另一方面,如果c小(假设c=1),则它将迭代n次。

第二循环

第二个循环是相同的推理。如果c大,则仅迭代几次,如果c小,则迭代多次,最糟糕的情况是n次。

组合/大O

Big O标记为算法的upper bound提供了time complexity。在您的情况下,第一和第二循环上限相结合,它为您提供了O(n*n)=O(n^2)