2016-12-16 5 views
1

У меня возникли проблемы с поиском документации по этому вопросу. Какова временная сложность list.count() в Python 3? Я предполагал, что это просто O (n), знает ли кто-нибудь, если это так?Python3 list.count() временная сложность

+1

Используйте [источник] (https://github.com/python/cpython/blob/master/Objects/listobject.c#L2181), Люк! Да, это O (n), потому что он выполняет простое линейное сканирование. –

+0

https://hg.python.org/cpython/file/c6880edaf6f3/Objects/listobject.c строка 2321, так что да – shash678

ответ

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') 

enter image description here

Похоже, что это на самом деле О (п) сложность.

Смежные вопросы