首頁  >  文章  >  後端開發  >  我們如何在Python中優雅地劃分整數?

我們如何在Python中優雅地劃分整數?

Linda Hamilton
Linda Hamilton原創
2024-11-06 08:40:02816瀏覽

How can we elegantly partition integers in Python?

Python 中的優雅整數分區

整數分區的任務涉及將給定數字分解為正整數之和,稱為部分。一個常見的例子是對數字 4 進行分區,它可以表示為 1 1 1 1 或 1 1 2 或 2 2。

優雅的Python 解決方案

解決由於需要一種優雅的方法,因此提出了一個名為partitions的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

該函數利用遞歸並產生給定數字n的所有可能的分區。它首先將 n 劃分為單個部分(本身),然後遞歸地將 n-i 劃分為大於或等於 i 的部分。

效能評估

與作為先前提出的函數,該解決方案在速度和記憶體使用方面都表現出顯著改進:

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))}")

建議的分區函數比原始函數大約快1370 倍,同時使用的記憶體顯著減少。

替代方法

雖然分區函數提供了高效能且優雅的解決方案,但ActiveState 等平台上還存在其他選項:

  • [生成器對於整數分割區(Python食譜)](https://www.activestate.com/recipes/577676-generator-for-integer-partitions/)

結論

提出的分區函數為Python 中的整數分區提供了一種高效且簡潔的方法。它的優雅和速度使其成為尋求改進編碼風格的程式設計師的寶貴工具。

以上是我們如何在Python中優雅地劃分整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn