Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können wir Ganzzahlen in Python elegant partitionieren?

Wie können wir Ganzzahlen in Python elegant partitionieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 08:40:02816Durchsuche

How can we elegantly partition integers in Python?

Ganzzahlpartitionierung mit Eleganz in Python

Die Aufgabe der Ganzzahlpartitionierung besteht darin, eine gegebene Zahl in eine Summe positiver Ganzzahlen, sogenannte Teile, zu zerlegen . Ein häufiges Beispiel ist die Partitionierung der Zahl 4, die als 1 1 1 1 oder 1 1 2 oder 2 2 dargestellt werden kann.

Elegante Python-Lösung

Um das anzugehen Für einen eleganten Ansatz wurde eine Python-Funktion mit dem Namen „Partitionen“ vorgeschlagen:

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

Diese Funktion nutzt Rekursion und liefert alle möglichen Partitionen einer gegebenen Zahl n. Es beginnt mit der Partitionierung von n als einzelnem Teil (selbst) und partitioniert dann n-i rekursiv in Teile, die größer oder gleich i sind.

Leistungsbewertung

Verglichen mit Diese Lösung ist eine zuvor vorgeschlagene Funktion und weist erhebliche Verbesserungen sowohl bei der Geschwindigkeit als auch bei der Speichernutzung auf:

import timeit

n = 20

# Original function
def nolen(n):
    """Original function for integer partitioning."""
    # implementation omitted for brevity

# Proposed 'partitions' function
def partitions(n, I=1):
    # implementation omitted for brevity

# Measure execution time
print("Original function (r0): ", timeit.timeit(lambda: r0 = nolen(n), number=100))
print("Proposed function (r1): ", timeit.timeit(lambda: r1 = list(partitions(n)), number=100))

print(f"Partitions are equal: {sorted(map(sorted, r0)) == sorted(map(sorted, r1))}")

Die vorgeschlagene Partitionsfunktion ist ungefähr 1370-mal schneller als das Original und verbraucht deutlich weniger Speicher.

Alternative Ansätze

Während die Partitionsfunktion eine leistungsstarke und elegante Lösung bietet, gibt es auf Plattformen wie ActiveState andere Optionen:

  • [Generator Für ganzzahlige Partitionen (Python-Rezept)](https://www.activestate.com/recipes/577676-generator-for-integer-partitions/)

Fazit

Die vorgeschlagene Partitionsfunktion bietet einen effizienten und prägnanten Ansatz für die Ganzzahlpartitionierung in Python. Seine Eleganz und Geschwindigkeit machen es zu einem wertvollen Werkzeug für Programmierer, die einen verbesserten Codierungsstil suchen.

Das obige ist der detaillierte Inhalt vonWie können wir Ganzzahlen in Python elegant partitionieren?. 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