我在找到这方面的文档方面遇到了很多麻烦。 Python 3中list.count()的时间复杂度是多少?我一直在假设它只是O(n),有人知道是不是这样吗?
答案 0 :(得分:3)
您可以使用timeit
模块尝试一些实验。
在很长的列表长度(list.count(0)
到10**0
)上计时10**6
。
from timeit import timeit
from math import log10
import matplotlib.pyplot as plt
data = []
for i in [10**x for x in range(6)]:
data.append((i, timeit.timeit('x.count(0)', setup='x=list(range(%d))' % i, number=1000)))
记录时间和列表长度以获得更好的可视化效果(注意我们在这里使用log10
,以匹配列表长度的范围)。
log_data = [log10(x), log10(y) for (x,y) in data]
生成快速图。
plt.figure()
plt.scatter(*zip(*log_times))
plt.xlabel('log(n)')
plt.ylabel('log(time)')
plt.savefig('count_complexity')
似乎确实是O(n)的复杂性。