合計Nの整数パーティションの数を探しています。パーツの数はSで、最大パーツは正確にXであり、すべてを列挙することはありません。
例:10個のパーツと42個が最大のパーツを持つ100個のすべてのパーティション。
この質問に対処する定理または分割IDは見つかりませんでした。これは、既知の定理から簡単に導き出せない重要な問題であると思われます(Nijenhuis and Wilf 1978、Andrews et al。2004、Bona 2006など)。
例:正確にSの部分を持つNのパーティションの数は、正確にSが最大の部分であるNのパーティションの数に等しくなります。
この質問は、純粋数学をはるかに超えた私の研究に関連しています。
更新:この質問は以下で回答されていますが、実装に使用したPythonスクリプトを投稿したいと思いました。速度を上げるために、おそらくCythonにプッシュします。
n = 100 # the total
s = 10 # number of parts
x = 20 # largest part
print Partitions(n,length=s,max_part=x).cardinality() # Sage is very slow at this
def parts_nsx(n,s,x):
if n==0 and s==0:return 1
if n<=0 or s<=0 or x<=0:return 0
if n>0 and s>0 and x>0:
_sum = 0
for i in range(0,s+1):
_sum += parts_nsx(n-i*x, s-i, x-1)
return _sum
print parts_nsx(n,s,x)