时间复杂度:嵌套for循环中的列表不断增加

时间:2019-03-16 12:26:13

标签: python time-complexity big-o

在此代码中:

test = [1] * 10
result = []
for i in test:
    if not result:
        result = [i,i,i]
    else:
        new_result = []
        for j in result:
            for k in range(3):
                new_result.append(i + k)
        result = new_result

外部循环运行n次。 如果我没记错的话,内循环运行3 ^ n

此算法的大O为3 ^ n * n。我对吗?

1 个答案:

答案 0 :(得分:1)

它只是3^n。如果您在执行后尝试这样做:

print(len(result)) #result: 59049
print(3**len(test)) #result: 59049

是的,它相对于n的大小呈指数增长,因为result的输出每次迭代将如下增长:

3
9
27
81
243
729
2187
6561
19683
59049

我用timeit打印出n增长的执行时间

n = 10 # Time:  0.020012678000000002
n = 11 # Time:  0.057932331000000004
n = 12 # Time:  0.15807880600000002

您会看到时间的流逝。

这是我使用的代码:

import timeit
test = [1] * 12
result = []
start = timeit.default_timer()

print(test)
for i in test:
    if not result:
        result = [i,i,i]
        print(result)
    else:
        new_result = []
        print(len(result))
        for j in result:
            for k in range(3):
                new_result.append(i + k)
        result = new_result

stop = timeit.default_timer()

print('Time: ', stop - start)