您能告诉我代码的时间复杂度吗,我正在使用分治法?
def max_of_list(l):
if(len(l)==1):
return l[0]
else:
left_max=max_of_list(l[:len(l)//2])
righ_max=max_of_list(l[len(l)//2:])
return max(left_max,righ_max)
您能告诉我代码的时间复杂度吗,我正在使用分治法?
def max_of_list(l):
if(len(l)==1):
return l[0]
else:
left_max=max_of_list(l[:len(l)//2])
righ_max=max_of_list(l[len(l)//2:])
return max(left_max,righ_max)
由于这是递归算法,因此您需要使用主定理:
T(n)= a T(n / b)+ f(n)
a:子问题数
b:减少子问题
f(n):子问题处理的拆分/合并的复杂性
由于f(n)的拆分/合并过程的复杂度为O(1),因此该算法具有递归性。因此,算法的复杂度为O(n ^ c),其中c是关键指数,由下式给出:
c = log(a)/ log(b)
在这种情况下:
c = log(2)/ log(2)= 1
因此,算法的复杂度是线性的:例如O(n)
您可以阅读有关Master theorem
的更多信息