算法的时间复杂度 - n或n * n?

时间:2016-03-21 12:16:53

标签: algorithm time-complexity

我试图找出这个算法的Theta复杂性。     (a是整数列表)

def sttr(a):
    for i in xrange(0,len(a)):
        while s!=[] and a[i]>=a[s[-1]]:
            s.pop()
        s.append(i)
    return s

一方面,我可以说append正在执行n(数组的长度)次,所以pop也是while,我应该考虑的最后一件事是{ {1}}条件最多可执行2n次。

由此我可以说这个算法最多是4*n所以它是THETA(n)。

但是,它不是摊销分析吗?

另一方面,我可以这样说:

有2个嵌套循环。 for周期正在执行n次。 while周期最多可执行n次,因为我必须在每次迭代中删除项目。所以复杂性是THETA(n * n)。

我想计算THETA,但不知道这两个选项中哪一个是正确的。你能给我一些建议吗?

1 个答案:

答案 0 :(得分:2)

答案是THETA(n),你的论点是正确的。

这不是摊销分析。

要进行摊销分析,您必须查看内循环。如果忽略算法的其余部分,你不能轻易地说出执行的速度有多快。朴素的方法是O(N),这是正确的,因为这是最大的迭代次数。但是,因为我们知道执行的总数是O(N)(你的参数),并且这将被执行N次,我们可以说内部循环的复杂性是O(1)摊销。