Was ist die Komplexität des in
Operators in Python? Ist es Theta (n)?
Ist es dasselbe wie das Folgende?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
ist eine Liste.
python
time-complexity
Sajad Rastegar
quelle
quelle
L
impliziert keine Liste.seq
ist die häufigste Wahl, wenn man eine Liste implizieren möchte.L
ist ein schrecklicher Variablenname. Einzelbuchstaben sind schlecht, und das Kapital impliziert, dass es eine Klasse ist. Auch wenn es sich um etwas Besonderes handelte, ist Python dynamisch. Geben Sie dies in einem solchen Fall explizit an.L
bedeutetlist
? Meine libtelepathy.so ist wahrscheinlich veraltet.list
Antworten:
Die Komplexität von
in
hängt ganz davon ab, wasL
ist.e in L
wird werdenL.__contains__(e)
.In diesem Dokument zur Zeitkomplexität finden Sie Informationen zur Komplexität mehrerer integrierter Typen.
Hier ist die Zusammenfassung für
in
:Der O (n) Worst Case für Sets und Dicts ist sehr ungewöhnlich, kann aber passieren, wenn er
__hash__
schlecht implementiert wird. Dies geschieht nur, wenn alles in Ihrem Set den gleichen Hashwert hat.quelle
OrderedDict
, und wie Sie herausfinden konnten:OrderedDict
wird von geerbtdict
, so dass die meisten Operationen (natürlich mit Ausnahmen) die gleiche Komplexität haben .Dies hängt vollständig von der Art des Behälters ab. Hashing-Container (
dict
,set
) verwenden den Hash und sind im Wesentlichen O (1). Typische Sequenzen (list
,tuple
) werden wie erraten implementiert und sind O (n). Bäume wären durchschnittlich O (log n). Und so weiter. Jeder dieser Typen hätte eine geeignete__contains__
Methode mit seinen Big-O-Eigenschaften.quelle
dict
undset
(sowie möglicherweise andere)Dies hängt vom zu testenden Container ab. Es ist normalerweise das, was Sie erwarten würden - linear für geordnete Datenstrukturen, konstant für ungeordnete. Natürlich gibt es beide Typen (geordnet oder ungeordnet), die möglicherweise von einer Baumvariante unterstützt werden.
quelle
A in B
testet, obA
inB
.