Сложность списка.индекс (x) в Python

Я имею в виду это: http://docs.python.org/tutorial/datastructures.html

каково было бы время работы list.index(x) функция с точки зрения большой o нотации?

4 ответов


Это O (n), также проверьте:http://wiki.python.org/moin/TimeComplexity

эта страница документирует временную сложность (он же "Big O" или "Big Oh") различных операций в текущем CPython. Другие реализации Python (или более старые или все еще разрабатываемые версии CPython) могут иметь несколько иные характеристики производительности. Однако, как правило, можно с уверенностью предположить, что они не медленнее, чем в o(log n)...


согласно указанной документации:

list.index(x)

возвращает индекс в списке первого элемента, значение которого равно x. Это ошибка, если такого элемента нет.

что подразумевает поиск. Вы эффективно делаете x in s но вместо того, чтобы возвратить True или False вы возвращаете индекс x. Таким образом, я бы пошел с перечисленные сложности времени O (n).


любая реализация списка будет иметь сложность O(n) для линейного поиска (например, list.индекс.) Хотя, возможно, есть некоторые дурацкие реализации, которые делают хуже...

вы можете улучшить сложность поиска, используя различные структуры данных, такие как упорядоченные списки или наборы. Обычно они реализуются с помощью бинарных деревьев. Однако эти структуры данных накладывают ограничения на элементы, которые они содержат. В случае двоичного дерева элементы должны быть упорядочиваемыми, но стоимость поиска сводится к O (log n).

Как упоминалось ранее, посмотрите здесь на затраты времени выполнения стандартных структур данных Python: http://wiki.python.org/moin/TimeComplexity


попробуйте этот код, он поможет вам получить время выполнения, занятое lis.оператор индекса.

import timeit
lis=[11,22,33,44,55,66,77] 
for i in lis: 
    t = timeit.Timer("lis.index(11)", "from main import lis") 
    TimeTaken= t.timeit(number=100000) 
    print (TimeTaken)