Heim > Artikel > Backend-Entwicklung > Wie kann Python-Code für die Ganzzahlpartitionierung eleganter und effizienter gestaltet werden?
Eleganter Python-Code für die Ganzzahlpartitionierung überarbeitet
Im Streben nach Code-Eleganz suchen Programmierer häufig nach prägnanten und effizienten Lösungen für komplexe Probleme. Eine solche Herausforderung ist die Ganzzahlpartitionierung, die Aufgabe, alle Partitionen einer bestimmten Ganzzahl in kleinere positive Ganzzahlen zu finden.
Verfeinerung der Lösung
Während frühere Versuche gültige Lösungen geliefert haben , es fehlte ihnen das gewünschte Maß an Eleganz. Eine verfeinerte Lösung eines anonymen Mitwirkenden bietet sowohl Kompaktheit als auch Geschwindigkeit:
<code class="python">def partitions(n, I=1): yield (n,) for i in range(I, n//2 + 1): for p in partitions(n-i, i): yield (i,) + p</code>
Leistungsvergleich
Ein Benchmarking dieser Lösung mit Nolens Originalcode zeigt einen erheblichen Geschwindigkeitsvorteil:
In [10]: %timeit -n 10 r0 = nolen(20) 1.37 s ± 28.7 ms per loop In [11]: %timeit -n 10 r1 = list(partitions(20)) 979 µs ± 82.9 µs per loop
Zusätzliche Lösungen
Für rechenintensive Fälle sorgt die Funktion accel_asc für noch schnellere Leistung:
<code class="python">def accel_asc(n): a = [0 for i in range(n + 1)] k = 1 y = n - 1 while k != 0: x = a[k - 1] + 1 k -= 1 while 2 * x < y: a[k] = x y -= x k += 1 l = k + 1 while x <= y: a[k] = x a[l] = y yield a[:k + 2] x += 1 y -= 1 a[k] = x + y y = x + y - 1 yield a[:k + 1]</code>
Es lohnt sich jedoch Beachten Sie, dass diese Lösung mehr Speicher benötigt als die einfachere Partitionsimplementierung.
Das obige ist der detaillierte Inhalt vonWie kann Python-Code für die Ganzzahlpartitionierung eleganter und effizienter gestaltet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!