一般生成函数和指数生成函数

本文深入探讨了一般生成函数(OGF)和指数生成函数(EGF)在解决多重集选择组合及排列问题中的应用。通过举例说明,阐述了如何利用这些函数计算特定组合和排列方案数,并揭示了它们在多重集分组问题中的组合意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一开始搞不懂指数生成函数到底是什么组合意义……

一般生成函数(OGF)

一般生成函数常用于多重集选择组合问题。

例:多重集中有 n n n 种不同的元素,每种分别有 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an 个,求从中选出 m m m 个的组合方案数。

我们设第 i i i 种元素的一般生成函数为 G i ( x ) = 1 + x + x 2 + ⋯ + x a i G_i(x)=1+x+x^2+\cdots+x^{a_i} Gi(x)=1+x+x2++xai

F ( x ) = ∏ i = 1 n G i ( x ) = ( 1 + x + ⋯ + x a 1 ) ( 1 + x + ⋯ + x a 2 ) ⋯ ( 1 + x + ⋯ + x a n ) F(x)=\prod\limits_{i=1}^{n}G_i(x)=\big(1+x+\cdots+x^{a_1}\big)\big(1+x+\cdots+x^{a_2}\big)\cdots\big(1+x+\cdots+x^{a_n}\big) F(x)=i=1nGi(x)=(1+x++xa1)(1+x++xa2)(1+x++xan),那么 F ( x ) F(x) F(x) m m m 次项的系数即为答案。

指数生成函数(EGF)

指数型母函数适用于解决多重集选择排列问题。

例:多重集中有 n n n 种不同的元素,每种分别有 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an 个,求从中选出 m m m 个并排列的方案数。

注意并不是求出组合方案数再乘上 m ! m! m! 就可以得到排列方案数了,因为选出的这 m m m 个元素有可能有相同的。

但是先确定组合再确定排列这个思路是没有问题的。

考虑一种组合的方案,其中第 i i i 种元素选了 b i b_i bi 个( ∑ i = 1 n b i = m \sum\limits_{i=1}^n b_i=m i=1nbi=m)。那么这种组合方案所贡献出的排列方案为 m ! b 1 ! b 2 ! ⋯ b n ! \dfrac{m!}{b_1!b_2!\cdots b_n!} b1!b2!bn!m!,相当于我先从 m m m 个位置中选出第 1 1 1 种元素放的位置,再选出第 2 2 2 种元素放的位置……以此类推。

所以如果我们设第 i i i 中元素的指数生成函数为 G i ( x ) = 1 + x + x 2 2 ! + ⋯ + x a i a i ! G_i(x)=1+x+\dfrac{x^2}{2!}+\cdots+\dfrac{x^{a_i}}{a_i!} Gi(x)=1+x+2!x2++ai!xai

F ( x ) = ∏ i = 1 n G i ( x ) = ( 1 + x + x 2 2 ! ⋯ + x a 1 a 1 ! ) ( 1 + x + x 2 2 ! ⋯ + x a 2 a 2 ! ) ⋯ ( 1 + x + x 2 2 ! ⋯ + x a n a n ! ) F(x)=\prod\limits_{i=1}^nG_i(x)=\left(1+x+\dfrac{x^2}{2!}\cdots+\dfrac{x^{a_1}}{a_1!}\right)\left(1+x+\dfrac{x^2}{2!}\cdots+\dfrac{x^{a_2}}{a_2!}\right)\cdots\left(1+x+\dfrac{x^2}{2!}\cdots+\dfrac{x^{a_n}}{a_n!}\right) F(x)=i=1nGi(x)=(1+x+2!x2+a1!xa1)(1+x+2!x2+a2!xa2)(1+x+2!x2+an!xan)

恰好发现 F ( x ) F(x) F(x) 也是答案的指数生成函数,那么 F ( x ) F(x) F(x) m m m 次项系数再乘回个 m ! m! m! 即为答案。

同时你也发现了它的另一种类似的组合意义:将 m m m 个不同的元素分成若干组,第 i i i 组至多有 a i a_i ai 个,求分组方案数。

这个组合意义和我们上面说的这段话类似:

我先从 m m m 个位置中选出第 1 1 1 种元素放的位置,再选出第 2 2 2 种元素放的位置……以此类推

所以说两种组合意义实际上是相通的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值