两种算法的运行时复杂度(Big O表示法计算)

时间:2017-10-17 13:03:43

标签: python algorithm runtime

这两种算法的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的运行时间,有人可以帮助我知道这样做。

谢谢......

1 个答案:

答案 0 :(得分:2)

  1. 操作次数T(n)等于T(n/2) + n。应用Master theorem我们得到T(n) = O(n)。简单来说,n + n/2 + n/4 + ... + 1次操作小于2*nO(n)

  2. 内环不依赖于外环,所以我们可以独立对待它们。 T(n) = O(log(maxlen) * log(minlen))