文章目录
可以先看这篇博客的生成函数和多项式部分。
在开头我们再次回顾生成函数定义:
一般生成函数(OGF)
一般用于处理组合问题(无标号)
F ( x ) = ∑ i = 0 ∞ f i x i F(x)=\sum_{i=0}^{\infin}f_ix^i F(x)=∑i=0∞fixi
OGF的运算
假设现在有两类组合对象 A , B A,B A,B
首先考虑如何对它们取并
显然对于一个元素 t t t,在 A A A中出现了 a t a_t at次,在 B B B中出现了 b t b_t bt次,一共会出现 a t + b t a_t+b_t at+bt次
记为 C ( x ) = A ( x ) + B ( x ) C(x)=A(x)+B(x) C(x)=A(x)+B(x)
那么对应标号的系数相加即可
然后考虑如何求它们的笛卡尔积
假设 A , B A,B A,B笛卡尔积为 C C C,那么表示 C C C中每个元素 c c c都是由 A A A中的一个元素 a a a和 B B B中的一个元素 b b b拼成的二元组 ( a , b ) , ∣ c ∣ = ∣ a ∣ + ∣ b ∣ (a,b),|c|=|a|+|b| (a,b),∣c∣=∣a∣+∣b∣
记为 C ( x ) = A ( x ) B ( x ) C(x)=A(x)B(x) C(x)=A(x)B(x)
在生成函数为有限项的时候用 F F T / N T T FFT/NTT FFT/NTT多项式乘法即可
OGF生成序列
现在有一类组合对象 A A A,定义 s e q ( A ) seq(A) seq(A) 是由 A A A的元素排列成的序列组成的集
合,一个序列的大小定义为其元素大小总和。
e g 1 : A = { " 0 " , " 1 " } eg1:A=\{"0","1"\} eg1:A={
"0","1"}, s e q ( A ) = { a l l 01 s t r i n g } seq(A)=\{all\ 01\ string\} seq(A)={
all 01 string}
e g 2 : N ∗ = { 1 , 2 , 3 , . . . } eg2:N^*=\{1,2,3,...\} eg2:N∗={
1,2,3,...},元素的大小定义为它的数值,则 s e q ( N ) = { 正 整 数 的 有 序 拆 分 } seq(N)=\{正整数的有序拆分\} seq(N)={
正整数的有序拆分}
规定A 中不含大小为0 的元素,则
s e q ( A ) = 1 + A + A 2 + A 3 + . . . = 1 1 − A seq(A)=1+A+A^2+A^3+...=\frac1{1-A} seq(A)=1+A+A2+A3+...=1−A1
指数生成函数(EGF)
一般用于处理组合问题(有标号)
常见带标号的组合对象:标号图,置换
将两个元素 a , b a,b a,b拼接起来, ∣ a ∣ = n , ∣ b ∣ = m |a|=n,|b|=m ∣a∣=n,∣b∣=m
无标号时,只有一种方法;
带标号时,规定拼接时拼接对象内部相对标号顺序不变,而互相的标号
可以改变,则有 ( n + m ) ! n ! m ! = C n + m n \frac{(n+m)!}{n!m!}=C_{n+m}^n n!m!(n+m)!=Cn+mn种方法
F ( x ) = ∑ i = 0 ∞ f i x i i ! F(x)=\sum_{i=0}^{\infin}f_i\frac{x^i}{i!} F(x)=∑i=0∞fii!xi
EGF的运算
并集: C ( x ) = A ( x ) + B ( x ) C(x)=A(x)+B(x) C(x)=A(x)+B(x)
笛卡尔积: C ( x ) = A ( x ) B ( x ) C(x)=A(x)B(x) C(x)=A(x)B(x)
对比系数后很好理解
EGF生成序列
同 O G F OGF OGF, s e q ( A ) = 1 1 − A seq(A)=\frac1{1-A} seq(A)=1−A1
EGF生成集合
集合与序列的区别:同样由 i i i个 E G F EGF EGF生成,集合的顺序不重要,序列的顺序确实确定的。
因此由 i i i个 E G F EGF EGF生成的集合应该有一个 1 i ! \frac1{i!} i!1的系数。
s e t ( A ) = ∑ i = 0 ∞ A i i ! = e A set(A)=\sum_{i=0}^{\infin}\frac{A^i}{i!}=e^{A} set(A)=∑i=0∞i!Ai=eA
生成函数计数
置换计数
一个置换是由若干轮换组成的集合。
k k k轮换的个数有 ( k − 1 ) ! (k-1)! (k−1)!个,对应 E G F EGF EGF为 ( k − 1 ) ! x k k ! = x k k (k-1)!\frac{x^k}{k!}=\frac{x^k}k (k−1)!k!xk=kxk
于是全体轮换的 E G F = ∑ i = 0 ∞ x k k EGF=\sum_{i=0}^{\infin}\frac{x^k}k EGF=∑i=0∞kxk
设 f ( x ) = ∑ i = 0 ∞ x k k f(x)=\sum_{i=0}^{\infin}\frac{x^k}k f(x)=∑i=0∞kxk
那么 f ′ ( x ) = ∑ i = 0 ∞ x k = 1 1 − x f'(x)=\sum_{i=0}^{\infin}x^k=\frac1{1-x} f′(x)=∑i=0