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 での整数パーティション化に対する効率的かつ簡潔なアプローチを提供します。その優雅さと速度により、コーディング スタイルの向上を求めるプログラマーにとって貴重なツールとなります。
以上がPython で整数をエレガントに分割するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。