基于生成函数的约束组合问题求解疑问咨询
我来帮你把这两个组合分配问题的解法理清楚,尤其是你卡住的第二个生成函数推导部分~
问题1:从7类玩具中选取25个,每类选取数量2到6之间的选法数
首先,这类有限制的相同物品选取问题,生成函数是最直接的工具:
- 每类玩具的选取数量范围是2到6,对应单个类的生成函数为:
t² + t³ + t⁴ + t⁵ + t⁶,可以化简为t²(1 - t⁵)/(1 - t)(用等比数列求和公式) - 7类玩具的总生成函数就是单个类生成函数的7次方:
[t²(1 - t⁵)/(1 - t)]⁷ = t¹⁴ · (1 - t⁵)⁷ · (1 - t)⁻⁷ - 我们需要找的是
t²⁵的系数,也就是t¹¹在(1 - t⁵)⁷ · (1 - t)⁻⁷中的系数。
接下来展开计算:
- 用二项式定理展开
(1 - t⁵)⁷:
由于我们要找(1 - t⁵)⁷ = 1 - C(7,1)t⁵ + C(7,2)t¹⁰ - C(7,3)t¹⁵ + ...t¹¹的系数,t¹⁵及更高次项的系数对结果无影响,可以忽略。 (1 - t)⁻⁷的t^k系数是组合数C(k + 7 - 1, k) = C(k + 6, k)(这是无限制分配的组合数公式,对应“k个相同物品分到7个盒子”的选法数)。
所以最终的系数为:
t¹¹在1·(1-t)⁻⁷中的系数:C(11 + 6, 11) = C(17, 11)- 减去
t¹¹在C(7,1)t⁵·(1-t)⁻⁷中的系数:C(7,1)·C(11-5 + 6, 11-5) = 7·C(12,6) - 加上
t¹¹在C(7,2)t¹⁰·(1-t)⁻⁷中的系数:C(7,2)·C(11-10 + 6, 11-10) = 21·C(7,1)
计算数值的话:C(17,6) -7*C(12,6)+21*C(7,1) = 12376 -7*924 +21*7 = 12376-6468+147=6055
问题2:25个相同的球分配到7个盒子中,第一个盒子最多放10个球的分配方式
你之前写的生成函数有个小笔误,正确的生成函数应该是这样推导的:
- 第一个盒子最多放10个,所以它的生成函数是
1 + t + t² + ... + t¹⁰ = (1 - t¹¹)/(1 - t) - 剩下6个盒子没有限制(默认允许放空),每个的生成函数是
1 + t + t² + ... = 1/(1 - t),所以6个盒子的总生成函数是1/(1 - t)^6 - 整体生成函数就是:
(1 - t¹¹)/(1 - t) · 1/(1 - t)^6 = 1/(1 - t)^7 - t¹¹/(1 - t)^7
现在要找t²⁵的系数,就对应两部分的系数相减:
1/(1 - t)^7的t²⁵系数:对应无限制分配25个球到7个盒子的选法数,公式是C(25 + 7 - 1, 25) = C(31, 25) = C(31,6)t¹¹/(1 - t)^7的t²⁵系数:等价于1/(1 - t)^7的t¹⁴系数(因为t¹¹ * t¹⁴ = t²⁵),对应第一个盒子先放11个球,剩下14个球无限制分配到7个盒子的选法数,即C(14 +7 -1,14)=C(20,14)=C(20,6)
所以最终的分配方式数就是:C(31,6) - C(20,6)
计算数值的话:C(31,6)=736281,C(20,6)=38760,所以结果是736281-38760=697521
内容的提问来源于stack exchange,提问作者rannoudanames
相关产品推荐
相关产品推荐

