[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren

Überblick

Wenn eine festgelegte Operation ausgeführt wird, kann die Ausführungsgeschwindigkeit verbessert werden, indem die Anzahl der Elemente des erhaltenen Ergebnisses verringert wird. Da das Operationsergebnis in einem neuen festgelegten Objekt zurückgegeben wird, dauert es einige Zeit, das Objekt zu erstellen, wenn die Anzahl der Elemente groß ist.

Hintergrund

Wenn ich in ABC157 D Friend Suggestions "len (XYZ)" einstelle, um die Anzahl der Elemente in einem bestimmten Satz zu berechnen, wurde dies zu TLE. AC wurde mit len (X) -len (X & (Y | Z)) durchgeführt. Ich habe versucht zu überprüfen, warum die Geschwindigkeit unterschiedlich ist.

|X|Wann ist groß

Unter der Voraussetzung des Problems|X|,|Y|,|Z| \leq 10^5Aber diesmal bin ich tatsächlich darauf gestoßen|X| \gg |Y|,|Z|Lassen Sie uns den Zustand von messen.

from timeit import timeit

xyz = 'X=set(range(10**5)); Y=set(range(10)); Z=set(range(5,15))' 

timeit('len(X-Y-Z)', setup=xyz, number=100)
# 0.3884289239649661

timeit('len(X)-len(X&(Y|Z))', setup=xyz, number=100)
# 0.0001103340182453394

Obwohl die Ergebnisse gleich sind, gibt es einen 3520-fachen Unterschied in der Ausführungszeit.

Wenn der Inhalt von X, Y, Z gleich ist

Als nächstes sei X, Y, Z das gleiche Element von $ 10 ^ 5 $.

from timeit import timeit

xyz = 'X=set(range(10**5)); Y=set(range(10**5)); Z=set(range(10**5))'

timeit('len(X-Y-Z)', setup=xyz, number=100)
# 0.28364974400028586

timeit('len(X)-len(X&(Y|Z))', setup=xyz, number=100)
# 1.1718004010035656

Nächstes Mallen(X)-len(X&(Y|Z))War langsamer.X&(Y|Z)Entspricht der ursprünglichen Menge, und es wird davon ausgegangen, dass die Anzahl der Elemente im Ergebnis zugenommen hat. Andererseits wurde "len (X-Y-Z)" auf etwa 1/3 verkürzt, wahrscheinlich weil im Stadium von "X-Y" ein leerer Satz erhalten wurde.

Differenzsatz gegenüber Produktsatz

Vereinfachen Sie das Problem und vergleichen Sie nur die Unterschiede und Produktvorgänge. Die andere Seite der Berechnung ist eine leere Menge, und die linke und rechte Seite werden ausgetauscht.

from timeit import timeit

xy = 'X=set(range(10**5)); Y=set()'

timeit('X-Y', setup=xy, number=100)
# 0.16930873499950394
timeit('Y-X', setup=xy, number=100)
# 1.7047044821083546e-05

timeit('X&Y', setup=xy, number=100)
# 1.0746996849775314e-05
timeit('Y&X', setup=xy, number=100)
# 1.502997474744916e-05

Selbst in der Differenzmenge ist es schnell, wenn die Anzahl der Elemente im Ergebnis gering ist. Anscheinend ist der Geschwindigkeitsunterschied nicht der Inhalt der Berechnung.

Generierung des Sets

Siehe Python-Dokumentation set.difference

Gibt eine neue Menge mit Elementen zurück, die in der Menge enthalten sind und nicht in allen anderen enthalten sind.

ein. Messen wir daher die Generierungszeit einer Menge mit einer großen Anzahl von Elementen.

from timeit import timeit

timeit('set(X)', setup='X=set(range(10**5))', number=100)
# 0.16229172004386783

Wenn die Anzahl der Elemente im Ergebnis groß war, dauerte es schließlich nur lange, bis die zurückgegebene Menge generiert wurde.

Recommended Posts

[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Das Ergebnis der Installation von Python auf Anaconda
Geben Sie die Anzahl der CPU-Kerne in Python aus
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Legen Sie die Obergrenze für die Anzahl der Wiederholungen rekursiver Funktionen in Python fest
Verwenden wir die offenen Daten von "Mamebus" in Python
[Python] Gibt alle Kombinationen von Elementen in der Liste aus
Lassen Sie uns das Ausführungsergebnis des Programms mit C ++, Java, Python messen.
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Mal sehen, wie man die Anzahl der Elemente in einem Array in einigen Sprachen zählt [Go, JavaScript, PHP, Python, Ruby, Swift]
Überprüfen Sie das Verhalten des Zerstörers in Python
Ordnen Sie die in pythons models.py festgelegte Tabelle zu
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Legen Sie den Prozessnamen des Python-Programms fest
Projekt Euler # 17 "Anzahl der Zeichen" in Python
[Python] Kombinieren Sie alle Elemente in einem Array
[Python3] Grundlegendes zu Dateivorgängen
Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
[Python] Berechnen Sie die Anzahl der Stellen, die zum Ausfüllen von Nullen erforderlich sind. [Hinweis]
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
[Python] Checklistenelemente alle, alle
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Lassen Sie uns das Git-Commit-Protokoll in Python analysieren!
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Berechnungsergebnis nach dem Dezimalpunkt in Python
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Umschreiben von Elementen in einer Listenschleife (Python)
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Lösen von Bewegungsgleichungen in Python (odeint)
Ausgabe in Form eines Python-Arrays
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird
Teilt die Zeichenfolge durch die angegebene Anzahl von Zeichen. In Ruby und Python.
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
[Python] Vorsichtsmaßnahmen beim Ermitteln der Maximal- und Minimalwerte mit einem Numpy-Array mit einer kleinen Anzahl von Elementen
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Dateioperationen in Python
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
[Python] Ein Programm, das die Anzahl der Täler zählt
In Python sortieren. Lassen Sie uns als nächstes über den Algorithmus nachdenken.
Zählen Sie die Anzahl der Parameter im Deep-Learning-Modell
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?