这两种算法的Big O表示法是什么:
def foo1(n):
if n > 1:
for i in range(int(n)):
foo1(1)
foo1(n / 2)
def foo2(lst1, lst2):
i = 1
while i < max(len(lst1), len(lst2)):
j = 1
while j < min(len(lst1), len(lst2)):
j *= 2
i *= 2
我认为foo1运行时复杂度为O(n),因为在这种情况下,如果我看到for循环,我可以这样做:
所有n的T(n)= O(n)+ O(n / 2)&lt; = c * O(n)(c为常数)。
是吗?
我无法计算foo2的运行时间,有人可以帮助我知道这样做。
谢谢......
答案 0 :(得分:2)
操作次数T(n)
等于T(n/2) + n
。应用Master theorem我们得到T(n) = O(n)
。简单来说,n + n/2 + n/4 + ... + 1
次操作小于2*n
且O(n)
。
内环不依赖于外环,所以我们可以独立对待它们。 T(n) = O(log(maxlen) * log(minlen))
。