一开始搞不懂指数生成函数到底是什么组合意义……
一般生成函数(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=1∏nGi(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=1∑nbi=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=1∏nGi(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 种元素放的位置……以此类推
所以说两种组合意义实际上是相通的。