Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann Python-Code für die Ganzzahlpartitionierung eleganter und effizienter gestaltet werden?

Wie kann Python-Code für die Ganzzahlpartitionierung eleganter und effizienter gestaltet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 16:49:02873Durchsuche

How Can Python Code for Integer Partitioning Be Made More Elegant and Efficient?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn