我正在做一个问题,要求找到使用大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)
我知道答案是正确的,但不确定我之前的计算是否......
答案 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; 单位成本操作: