运行时间是多少?
def a(n):
if n % 2 == 0:
return n
else:
return a(n/2)
我的猜测T(n)= T(n / 2)+ 1,然后使用主定理。
这个功能怎么样:
def b(n):
for i in range(n):
print(a(i))
这是我的猜测。
T(n)= nT(n / 2)+ 1
答案 0 :(得分:1)
第一个是O(logN),第二个是O(NlogN)。
1)你每次迭代都会减少一半的问题。所以你迭代的总次数是:
我这样2 ** i = N,在数学i =基数2中的logN。有O(logN)
2)你正在遍历整个N大小的列表,所以O(N),但是你在每次迭代时调用一个logN函数。所以我们调用logN函数N次。这是O(NlogN)。