我如何计算复杂性的顺序?

时间:2013-12-06 14:09:37

标签: python-3.x complexity-theory

我想我知道这两个代码的复杂性,但我无法找到正确的方程来证明它。 我假设的第一个是O(loglogn)。第二个是O(n ^ 2)。

def f1(lst):
    i=2
    while i<len(lst):
        print(lst[i])
        i **= 2

第二个代码:

def f2(lst):
    i = len(lst)
    while i>0:
        for j in range(i):
            for k in range(10**5, j, -5):
                print(i)
        i -= 2

1 个答案:

答案 0 :(得分:0)

我认为您可以先尝试获得递归方程,然后使用主定理或其他方法来求解递归方程。对于第一个,我们使用lst的长度作为参数。

def f1(lst1): #len(lst2)=N
    i=2
    while i<len(lst1):
        print(lst1[i])
        i **= 2

def f1(lst2): #len(lst2)=N^2
    i=2
    while i<len(lst2):
        print(lst2[i])
        i **= 2

你会注意到第二个只比第一个执行一次。所以你得到了

T(N ^ 2)= T(N)+1。

为简化起见,假设N ^ 2 = 2 ^ k,

然后T(2 ^ k)= T(2 ^(k / 2))+ 1,设f(k)= T(2 ^ k),

然后f(k)= f(k / 2)+1,

使用主定理,T(N ^ 2)= f(k)= log(k)= log(log(2 ^ k))= log(log(N ^ 2))。

我们最后得到T(N)= O(loglog(N))。