函数power(n,p)接受一个数字和一个幂,并返回加到给定幂的数字。 此函数的复杂度必须为O(log(p))。
def power(n,p):
if (p == 0): return 1
elif (int(p % 2) == 0):
return (power(n, int(p / 2)) *
power(n, int(p / 2)))
else:
return (n * power(n, int(p / 2)) *
power(n, int(p / 2)))
print(power(2,8))
是否满足o(log n)复杂度。我真的不了解log n复杂度的工作原理
答案 0 :(得分:1)
您的代码的重复关系为:
T(p) = 2 * T(p / 2) + O(1)
使用master theorem,我们得到T(p) = O(p)
。因此,它不是O(log(p))
。
要使其成为O(log(p))
,您可以执行以下操作:
def power(n, p):
if p == 0:
return 1
# Call this only once, instead of two times.
power_p_divided_by_2 = power(n, p // 2)
if p % 2:
return n * power_p_divided_by_2 * power_p_divided_by_2
else:
return power_p_divided_by_2 * power_p_divided_by_2
print(power(2, 8))
此代码的重复关系为:
T(p) = T(p / 2) + O(1)
使用master theorem,我们得到T(p)= O(log(p))。