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.
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.
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
bedeutet list
? Meine libtelepathy.so ist wahrscheinlich veraltet.
list
Antworten:
Die Komplexität von in
hängt ganz davon ab, was L
ist. e in L
wird werden L.__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.
OrderedDict
, und wie Sie herausfinden konnten: OrderedDict
wird von geerbt dict
, 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.
dict
und set
(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.
A in B
testet, ob A
in B
.