各部分の最小値と最大値を持つ正確にk個の部分の番号のパーティションを生成するにはどうすればよいですか?例えば最小値と最大値を持つk個の部分の分割
私は最小部分値3と6部と21のすべてのパーティションを選択したいと最大部の値が6であれば、私は次のパーティションを取得する必要があります。
[3, 3, 3, 3, 3, 6]
[3, 3, 3, 3, 4, 5]
[3, 3, 3, 4, 4, 4]
私は、次のしています
:パーティションコード、 http://jeromekelleher.net/generating-integer-partitions.htmldef accel_asc(n):
a = [0 for i in range(n + 1)]
k = 1
y = n - 1
while k != 0:
x = a[k - 1] + 1
k -= 1
while 2 * x <= y:
a[k] = x
y -= x
k += 1
l = k + 1
while x <= y:
a[k] = x
a[l] = y
yield a[:k + 2]
x += 1
y -= 1
a[k] = x + y
y = x + y - 1
yield a[:k + 1]
の礼儀と私は上記の機能から、私がしたいパーティションを取得するために書いた簡単なのfuctionを昇順
特定の値のすべてのパーティションを生成してループするのではなく、指定した条件を満たすものだけを生成したいと考えています。ここで
なぜあなたは、与えられた境界を持つすべての固定サイズのパーティションを生成しようとしていますか?あなたは計算をスピードアップしようとしていますか?メモリ効率を向上させる?他の何か?最も簡単なアプローチは、パーティションがあなたの基準に合っているが、あなたのニーズを満たしていない場合にのみ生成しなければならない生成コードを変更することです。 – gbe
私は計算を高速化しようとしています。条件に合致するパーティションのみを生成するように生成コードを変更することは、どうやってそれをしたいのかです。私が苦労しているのは、そうするためにaccel_asc関数を変更する方法です。 – L85376