for循环的复杂性

时间:2016-12-27 11:48:17

标签: algorithm asymptotic-complexity

我在网上发现了这个:

for (i=1; i<=n*n; i++)
    for (j=0; j<i; j++)
        sum++;

执行sum ++的确切次数:

Sum{i=1, i=n^2}= (n^2)*((n^2)+1)/2 ∈ Θ(n^4)

报价结束。

虽然我同意结果,但在我看来,这只涉及帐户中的第一个循环,i上的那个,而不是j上的那个。换句话说,在数学上我们会得到与代码相同的结果:

for (i=1; i<=n*n; i++)
    sum++;

即,仍然:Sum {i = 1,i = n ^ 2} =(n ^ 2)*((n ^ 2)+1)/2∈Θ(n ^ 4) 而这段代码显然是Θ(n ^ 2)(它恰好运行n ^ 2次)

有人可以解释一下我缺少的东西吗?

2 个答案:

答案 0 :(得分:2)

假设在递增值的同时完成了一定数量的操作c

enter image description here

答案 1 :(得分:1)

没有j,它将是Count {i = 1,i = n ^ 2},而不是Sum {i = 1,i = n ^ 2},因此它将推导为n * n