def partitions(n):
# base case of recursion: zero is the sum of the empty list
if n == 0:
yield []
return
# modify partitions of n-1 to form partitions of n
for p in partitions(n-1):
yield [1] + p
if p and (len(p) < 2 or p[1] > p[0]):
yield [p[0] + 1] + p[1:]
説明:nのパーティションがある場合、パーティション内の最小の項目から1を引くことにより、標準的な方法でn-1のパーティションに減らすことができます。例:1 + 2 + 3 => 2 + 3、2 + 4 => 1+4。このアルゴリズムはプロセスを逆にします。n-1のパーティションpごとに、このプロセスによってpに削減されるnのパーティションを見つけます。したがって、nの各パーティションは、それが減少するn-1のパーティションが考慮されるステップで、1回だけ出力されます。
これは、Pythonで数値の可能なすべてのパーティションを取得するためのコードです。私はPythonが苦手です。誰かがそれを擬似コード(または詳細な説明)またはPHPに変換していただければ幸いです。上記の説明は、「パーティション内の最小のアイテムから1つを差し引く」ことについての私の心に疑問を投げかけます。2番目に小さい要素または他の要素から1を引くこともできます。では、なぜ最小なのか?誰かが私に全体の考えを説明することができれば、それは本当にありがたいです。ありがとう。