wake-up-neo.com

Zeitliche Komplexität von python set-Operationen?

Was ist die zeitliche Komplexität der einzelnen Python-Mengenoperationen in Big O -Notation?

Ich verwende Pythons set type für eine Operation mit einer großen Anzahl von Elementen. Ich möchte wissen, wie sich die Leistung jeder Operation auf die Größe des Sets auswirkt. Zum Beispiel add und der Test für die Mitgliedschaft:

myset = set()
myset.add('foo')
'foo' in myset

Das Herum-googeln hat keine Ressourcen bereitgestellt, aber es scheint vernünftig, dass die zeitliche Komplexität für die Implementierung von Pythons Sets sorgfältig abgewogen worden wäre.

Wenn es existiert, wäre ein Link zu etwas wie this großartig. Wenn nichts dergleichen da draußen ist, können wir es vielleicht herausfinden?

Zusätzliche Markierungen zum Ermitteln der zeitlichen Komplexität von allen Mengenoperationen.

50
Stephen Emslie

Entsprechend Python-Wiki: Zeitkomplexität ist set als Hash-Tabelle implementiert. Sie können also damit rechnen, im Durchschnitt O (1) nachzuschlagen/einzufügen/zu löschen. Wenn der Ladefaktor Ihrer Hash-Tabelle nicht zu hoch ist, treten Kollisionen und O (n) auf.

P.S. Aus irgendeinem Grund fordern sie O(n) für Löschoperationen, die wie ein Fehlertyp aussehen.

P.P.S. Dies gilt für CPython, pypy ist ein andere Geschichte .

34

Die Operation in sollte unabhängig von der Größe des Containers sein, dh. O (1) - bei optimaler Hash-Funktion. Dies sollte fast wahr sein für Python Strings. Hashing-Strings sind immer kritisch, Python sollte klug sein und daher können Sie erwarten Nahezu optimale Ergebnisse.

4
towi