Ich versuche mich davon zu überzeugen, dass eine zählende Sortierung schneller als die sortierte Methode in Python ausführt. Das Aufrufen des sortierten Bausteins scheint jedoch selbst für große Eingaben wie 10 Millionen Elemente schneller zu sein. Was kann ich tun, um das Zählen schneller zu machen?Sortieren von Kleinbuchstaben in Python
erzeugen ich eine Liste von Kleinbuchstaben um das Beispiel zu 26 eindeutige Werte zu vereinfachen:
letters = [random.choice(string.ascii_lowercase) for i in range(10000000)]
ich tun, dann wird die folgende Variante Countingsort:
def sorted_count(letters):
counts = [0] * 26
for letter in letters:
counts[ord(letter) - 97] += 1
out = [None] * len(letters)
j = 0
for i in range(len(counts)):
while counts[i] > 0:
out[j] = chr(i + 97)
counts[i] -= 1
j += 1
return out
Auch auf 10.000.000 Elemente der Anruf zu sorted(letters)
ist ~ 4x schneller. Wie kann ich die Geschwindigkeit meiner Sorte verbessern?
Do Hast du das ganze Timeit-Skript? –
Außerdem vergleichen Sie einfachen Python-Code mit optimiertem C-Code. 4x langsamer ist wirklich nicht schlecht und könnte als "schneller" angesehen werden. –
Fragen Sie nach (theoretischen) algorithmischen Verbesserungen? In der Praxis macht es wenig Sinn, die Performance von Algorithmen in reinem Python zu messen. Wie @EricDuminil erwähnt, ist der Vergleich mit [built-in sort] (https://github.com/python/cpython/blob/2ebc5ce42a8a9e047e790aefbf9a94811569b2b6/Objects/listobject.c#L1978) (was eine Vergleichssortierung in C geschrieben ist) ungültig. Für reale Anwendungsfälle verwenden Sie eine native Sprache (möglicherweise eine C++ Erweiterung für Python), gehen parallel, versuchen GPUs, finden Struktur in Ihren Eingabedaten, die eine schnellere Edge-Case-Behandlung ermöglichen usw. – Drop