输入是多个1(或无)的列表L,后跟多个2(或无)。下面的算法找到1的数量。对于一般情况,假设L具有包含1的等概率。
A(L):
n=L.length
m=sqrt(n)
p=m-1
while p<n and L[p]=1
p+=m
p-=m+1
while p<n and L[p]=1
p+=1
return p
答案 0 :(得分:1)
问题可以通过平分列表来解决O(log2(n))。
至于你在这里的算法,它的复杂性大约是O(2sqrt(n))。
答案 1 :(得分:0)
此循环只能在p到达n之前执行sqrt(n)次。
while p<n and L[p]=1
p+=m
p-=m+1
对于这个循环也是如此,因为p和n之间的差异小于sqrt(n)
while p<n and L[p]=1
p+=1
return p
因此,在平均和最差情况下,您的复杂度为O(sqrt(n))。