我试图找出这个算法的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,但不知道这两个选项中哪一个是正确的。你能给我一些建议吗?
答案 0 :(得分:2)
答案是THETA(n)
,你的论点是正确的。
这不是摊销分析。
要进行摊销分析,您必须查看内循环。如果忽略算法的其余部分,你不能轻易地说出执行的速度有多快。朴素的方法是O(N),这是正确的,因为这是最大的迭代次数。但是,因为我们知道执行的总数是O(N)(你的参数),并且这将被执行N次,我们可以说内部循环的复杂性是O(1)摊销。