是什么让这些嵌套循环O(n ^ 3)?

时间:2018-02-02 19:24:32

标签: time-complexity

所以我一直在看这些嵌套的for循环:

for i = 1 to n:
    for j = i to n:
        for k = i to n:
            sum = i + j + k

现在我可以看到这是O(n ^ 3),因为它是三个线性增长,嵌套循环依赖于n,但我不知道我将如何以数学方式显示它。

1 个答案:

答案 0 :(得分:0)

最简单的方法是计算确切的运行时间(即迭代次数),然后自然而然地发现Big-Oh复杂性。让我们尝试计算前几个值:

i = 1 - > j1转到nk1转到n - > n*n次迭代

i = 2 - > j2转到nk2转到n - > (n-1)*(n-1)次迭代

i = 3 - > j3转到nk3转到n - > (n-2)*(n-2)次迭代

...

i = m - > jm转到nkm转到n - > (n-m+1)*(n-m+1)次迭代

要获得总迭代次数,我们显然必须得到(n-i+1)*(n-i+1)的总和,其中i1变为n。计算并不难:

enter image description here

这里我们使用公式来表示首先n自然数和第一个n正方形的总和。现在很明显n^3占主导地位,因此时间复杂度为O(n^3)