大问题 - 算法分析II

时间:2011-04-11 14:09:01

标签: algorithm big-o code-analysis analysis

我正在做一个问题,要求找到使用大O表示法简化的嵌套for循环的复杂性。

问题是:

for i <- 1 to n do
    for j <- 1 to n do
        for k <- 1 to (i+j) do
            a unit cost operation

我必须使用系列符号的总和来证明上述内容。我有点理解这个概念并给了它一个裂缝。我只是想知道我是否正确地做到了。

以下是我的回答:

**假设sum(x = i,y)是大写sigma表示法,x为下界,y为上界。

=&GT; sum(i = 1,n)sum(j = 1,n)sum(k = 1,i + j)1
=&GT; sum(i = 1,n)sum(j = 1,n)(i + j)
=&GT; sum(i = 1,n)n * i =&GT; n * sum(i = 1,n)i

在算术系列之和的规则中给出: =&GT; N * N / 2(N + 1) =&GT; (n ^ 3 + n ^ 2)/ 2

使用大哦规则 - &gt; max(f(x),g(x)): =&GT; max(n ^ 3/2,n ^ 2/2) =&GT;为O(n ^ 3)

我知道答案是正确的,但不确定我之前的计算是否......

2 个答案:

答案 0 :(得分:2)

稍作修正:

  sum(i=1, n) sum(j=1, n) sum(k=1, i+j) 1
= sum(i=1, n) sum(j=1, n) (i+j)
= [ sum(i=1, n) sum(j=1, n) i ] + [ sum(i=1, n) sum(j=1, n) j ]
=   sum(i = 1, n) n*i           +   sum(i=1, n) n*(n+1)/2 
=   n * sum (i = 1, n) i        +   n * n * (n+1) / 2
=   n * n * (n+1) / 2           +   n * n * (n+1) / 2
=   n * n * (n+1)
=   n^3 + n^2
=   O( max(n^3, n^2) )           <--- as you correctly say
=   O(n^3)

实际上,它是Θ(n^3)


您也可以使用i+j <= 2*n

   sum(i=1, n) sum(j=1, n) sum(k=1, i+j) 1
=  sum(i=1, n) sum(j=1, n) (i+j)
<= sum(i=1, n) sum(j=1, n) 2*n
=  2*n * sum(i=1, n) sum(j=1, n) 1
=  2 * n^3
=  O(n^3)

答案 1 :(得分:0)

直截了当地(经验证实),c - &gt; 单位成本操作

enter image description here