ホームページ  >  記事  >  バックエンド開発  >  Python で整数をエレガントに分割するにはどうすればよいでしょうか?

Python で整数をエレガントに分割するにはどうすればよいでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-06 08:40:02819ブラウズ

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:

  • [Generator] などのプラットフォームには他のオプションも存在します。整数パーティションの場合 (Python レシピ)](https://www.activestate.com/recipes/577676-generator-for-integer-partitions/)

結論

提案されたパーティション関数は、Python での整数パーティション化に対する効率的かつ簡潔なアプローチを提供します。その優雅さと速度により、コーディング スタイルの向上を求めるプログラマーにとって貴重なツールとなります。

以上がPython で整数をエレガントに分割するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。