我想我知道这两个代码的复杂性,但我无法找到正确的方程来证明它。 我假设的第一个是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
答案 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))。