你会如何找到这个算法的复杂性?

时间:2017-09-27 04:41:51

标签: algorithm big-o analysis

function alg1(n)
1 a=0
2 for o=1 to n do
3     for t=1 to o do
4         for k=t to o+t do
5         a=a+1
6 return(a)

如果有人能指导我如何在这里找到最坏情况,以及如何将alg1的输出作为n的函数,我将非常感激。谢谢!

2 个答案:

答案 0 :(得分:3)

我们可以计算此代码执行的确切增量数。首先,让我们替换

for k=t to o+t do

for k=1 to o+1 do 

在此更改之后,两个内部循环看起来像这样

for t=1 to o do
    for k=1 to o+1 do

这些循环的迭代次数显然是o*(o+1)。迭代的总数可以通过以下方式计算: enter image description here

当使用big-O表示法时,我们可以排除多项式的系数和低阶项。因此,复杂度 O(n ^ 3)

答案 1 :(得分:1)

从最后一个循环中减去t,使其变为

for k=0 to o do

现在,对于o的每个值,2个最内部循环将运行O(o ^ 2)时间。答案是

1^2 + 2^2 + ... n^2

等于

  

N(N + 1)(2N + 1)/ 6。因此它将是O(n ^ 3)

的阶数