日记 2024.3.22:生成函数

日记 2024.3.22:生成函数

定义

例题

\(m\) 种小球,要取出 \(n\) 个。

  1. 每种小球各一个,\(\dbinom m n\) 或者 \([x^n](1+x)^m=\dbinom m n\)
  2. 每种小球无限多个,\(\dbinom{m+n-1}{m-1}\) 或者 \([x^n]\dfrac{1}{(1-x)^m}\)(就是 \(\dfrac{1}{1-x}=1+x+x^2+\cdots\))。

广义二项式定理:\((x+y)^r=\sum_{k=0}^{\infty}\dbinom{r}{k}x^ky^{r-k}\)\(\dbinom r k=\dfrac{r^{\underline k}}{k!}\)\(r\) 可以是实数。

提取 \([x^n]\) 的系数。

\[(-1)^n\dbinom{-m}{n}=(-1)^n\dfrac{(-m)(-m-1)\cdots(-m-n+1)}{n!}\\=\dfrac{m(m+1)\cdots(m+n-1)}{n!}=\dbinom{m+n-1}{n}=\dbinom{m+n-1}{m-1} \]

运算法则

数乘

一个数列 \(\{a_i\}\) 的生成函数为 \(F(x)\),则 \(\{ca_i\}\) 的生成函数为 \(cF(x)\)

加法

两个数列对应相加的生成函数就是各自的生成函数相加。

右移

一个数列,往前面补 \(k\) 个零,生成函数 \(\times x^k\)

求导

一个数列 \(\{a_0, a_1, a_2, \cdots\}\) 的生成函数为 \(F(x)\),则 \(\{a_1, 2a_2, 3a_3, \cdots\}\) 的生成函数为 \(F'(x)\)

例子

因为全部是 \(1\) 的数列是 \(F(x)=\dfrac{1}{1-x}\)。求导一次变成 \(F'(x)=-(1-x)^{-2}(-1)=\dfrac{1}{(1-x)^2}\),即数列 \(\{1, 2, 3, 4, \cdots\}\)

然后再次求导,再做一次右移。用到求导的除法法则。然后就得到了 \(\{0, 1, 4, 9, 16, 25, \cdots\}\)

乘法

就是卷积。

计算数列

1. \(2^n-1\)

\(f_0=0, f_i=2f_{i-1}+1\),求生成函数。

\(F(x)\) 的每项系数写出来,写 \(n\) 行,然后左边求和,右边求和。

\[F(x)=2xF(x)+\frac{x}{1-x} \]

\[(1-2x)F(x)=\frac{x}{1-x}\implies F(x)=\frac{x}{(1-x)(1-2x)}=\frac{1}{1-2x}-\frac{1}{1-x} \]

提取 \([x^n]\) 得到 \(2^n-1\)

2. 斐波那契数列

\(f_0=0, f_1=1, f_i=f_{i-1}+f_{i-2}\)。求生成函数。

\[\begin{cases} f_0&=0\\ f_1x&=x\\ f_2x^2&=f_1x^2\\ f_3x^3&=f_2x^3+f_1x^3\\ f_4x^4&=f_3x^4+f_2x^4\\ \cdots\\ \end{cases} \]

\[F(x)=xF(x)+x^2F(x)+x\implies F(x)=\frac{x}{1-x-x^2} \]

待定系数,声称

\[F(x)=\frac{A}{1-ax}+\frac{B}{1-bx}\implies(1-ax)(1-bx)=1-x-x^2 \]

可以直接计算出 \(a, b\),进而计算 \(A, B\)。分子为 \(x\)

然后展开这个分式,太阴间了,反正就是 \([x^n]\dfrac{\beta}{1-\alpha x}=\alpha^n\beta\) 提取某一项系数的一个基本工具。(\(\alpha, \beta\) 为数)

估计它的增长,将其中一个 \(<1\) 的根的 \(n\) 次方直接忽略,然后就可以发现它大概以 \(1.618\) 增长。


这里具体写一下过程了。

\[(1-ax)(1-bx)=1-x-x^2\implies\begin{cases} ab=-1,\\ a+b=1 \end{cases} \]

这种东西听说有深刻做法,即用韦达定理构造出根为 \(a, b\) 的一元二次方程,即 \(t^2-t-1=0\),解得(不妨 \(a<b\)

\[t=\frac{1\pm \sqrt 5}{2}\implies\begin{cases} a=\dfrac{1- \sqrt 5}{2}\\ b=\dfrac{1+ \sqrt 5}{2} \end{cases} \]

从而考虑分子:

\[A-Abx+B-Bax=x\implies A + B = 0\land Ab+Ba=1\implies A=\frac{1}{b-a}=\frac{\sqrt 5}{5}. \]

所以

\[F(x)=\frac{x}{1-x-x^2}=\frac{\sqrt 5}{5}\left(\frac{1}{1-ax}-\frac{1}{1-bx}\right) \]

提取 \([x^n]\) 项系数得到

\[[x^n]F(x)=\frac{\sqrt 5}{5}\left(a^n - b^n\right) \]

3. Catalan 数列

Catalan 数列,\(f_0=1, f_n=\binom{2n}{n}/(n+1)=\sum_{i=0}^{n-1}f_if_{n-i-1}\)。求生成函数。

\[F(x)=1+xF^2(x)\implies xF^2(x)-F(x)+1=0 \]

解方程:

\[F(x)=\frac{1\pm\sqrt{1-4x}}{2x} \]

考察 \(F(0)=1\),但是如果取 \(+\) 号,\(F(0)=\frac{1+1}{0}\)。取 \(-\) 号,\(F(0)=\frac{0}{0}\) 洛必达法则可以使它 \(=1\)。所以

\[F(x)=\frac{1-\sqrt{1-4x}}{2x} \]

下一步是展开,我的天有点阴间,等一会。就是拆开,然后广义二项式定理,注意这个 \(\frac{1}{2x}\) 特别阴间。


\[(1-4x)^{1/2}=\sum_{n\geq 0}\binom{1/2}{n}(-4x)^n=1+\sum_{n\geq 1}\binom{1/2}{n}(-4x)^n \]

考虑

\[\begin{aligned} \binom{1/2}{n}(-4)^n&=\frac{1}{2}\frac{-1}{2}\frac{-3}{2}\cdots\frac{(-4)^n}{n!}\\ &=(-1)\times 1\times 3\times 5\times\cdots \times\frac{2^n}{n!}\\ &=1\times 3\times 5\times\cdots (2n-3)\times\frac{-2^n}{n!}\\ &=\frac{1\times 2\times 3\times\cdots (2n-2)}{2\times 4\times 6\times\cdots\times (2n-2)}\times\frac{-2^n}{n!}\\ &=\frac{(2n-2)!}{(n-1)!}\times\frac{-2}{n!}\\ &=\binom{2n-1}{n}\times\frac{-2}{2n-1}\\ \end{aligned} \]

所以

\[1-\sqrt{1-4x}=\sum_{n\geq 1}\binom{2n-1}{n}\times\frac{2}{2n-1}x^n \]

所以

\[\begin{aligned} F(x)&=\frac{1-\sqrt{1-4x}}{2x}\\ &=\sum_{n\geq 1}\binom{2n-1}{n}\times\frac{1}{2n-1}x^{n-1}\\ &=\sum_{n\geq 0}\binom{2n+1}{n+1}\times\frac{1}{2n+1}x^{n}\\ &=\sum_{n\geq 0}\binom{2n}{n}\times\frac{1}{n+1}x^{n}\\ \end{aligned} \]

最后一步,吸收恒等式。

\[\binom n r=\frac n r\binom{n-1}{r-1} \]

所以 \(f_i=\dbinom{2n}n/(n+1)\)

一般的情况

尝试递归刻画 \(F(x)\),下一步刻画成分式,下一步阴间展开,展开成分母只有一次的分式或应用广义二项式定理。

例题

1. 整数的 lqp 拆分

\(g_n=f_n+\sum_{i=1}^{n-1}f_ig_{n-i}\) 表示 \(n\) 的答案,\(f_i\) 是斐波那契数列。

我们定义 \(g_0=1\)。这样以后

\[g_n=\sum_{i=1}^{n}f_ig_{n-i}\implies G(x)=G(x)F(x)+1 \]

解得

\[G(x)=\frac{1}{1-F(x)}=\frac{1}{1-\frac{x}{1-x-x^2}}=\frac{1-x-x^2}{1-2x-x^2}=1-\frac{x}{x^2+2x-1} \]

这个时候 Bostan-Mori 算法已经可以解决,但是更进一步的,设 \(a<b\)\(x^2+2x-1\) 的两个根。

\[\frac{x}{x^2+2x-1}=\frac{A}{x-a}+\frac{B}{x-b}\implies Ax-Ab+Bx-Ba=0\implies A+B=1, Ab+Ba=0 \]

所以

\[Ab+(1-A)a=0\implies A=\frac{a}{a-b} \]

这里,\(a, b=\frac{-2\pm2\sqrt 2}{2}=-1\pm\sqrt 2\),所以 \(A=\frac{2+\sqrt 2}{4}, B=\frac{2-\sqrt 2}{4}\)。所以

\[[x^n]G(x)=[n=0]+\frac{A}{a^{n+1}}+\frac{B}{b^{n+1}} \]

大概这种状物。不想验算。感觉不如背 Bostan-Mori 算法。

2. P3978 概率论

求一个 \(n\) 个点的有根二叉树的叶子节点个数的期望。记答案为 \(h_n\)

\[h_n=2\sum_{i=1}^{n-1}h_ic_{n-i-1} \]

左右子树各卷对方的 Catalan 一次。\(h_0=0, h_1=1\)

\[H(x)=2xH(x)C(x)+x\implies H(x)(1-2xC(x))=x\implies H(x)=\frac{x}{1-2xC(x)} \]

我们已知

\[C(x)=\frac{1-\sqrt{1-4x}}{2x} \]

解得

\[H(x)=\frac{x}{\sqrt{1-4x}}=x(1-4x)^{-1/2} \]

广义二项式定理。看上去和 Catalan 数列通项公式推导是本质相同的。

3. 拆分问题

\(n\) 拆分为若干个 \(2, 3, 4\) 的和,可以重复选,只关心重数,不关心顺序,求方案数。令答案为 \(g\)

\[G(x)=\frac{1}{(1-x^2)(1-x^3)(1-x^4)} \]

\[H(x)=1/G(x)=(1-x^2)(1-x^3)(1-x^4)=H_0+H_1x+H_2x^2+\cdots+H_9x^9 \]

因为 \(H(x)\) 项数很少,考虑以 \(H(x)\)\(G(x)\)。因为 \(G(x)H(x)=1\)。所以

\[\sum_{i=0}^{\min(n, 9)}h_ig_{n-i}=0 \]

除非 \(n=0\),此时 \(h_0g_0=1\)

这是一个齐次的线性递归式。我服了这玩意直接 Bostan-Mori 算法带走。或者矩阵快速幂也行的。反正 \(10\) 项怎么递推都行了。

4. CF506E 简化版

\(p, q\leq 200\)\(p\) 个字符串,\(s_1, \cdots, s_p\),字符集 a-z\(q\) 个字符串,\(t_1, \cdots, t_q\),字符集 a-y。字符串 \(r\) 的字符集为 a-z:长度不限可以为空。总长度为 \(L\)。求方案数。设答案为 \(g_L\)

\[G(x)=\frac{1}{(1-24x)^p(1-25x)^q(1-26x)} \]

倒数

\[H(x)=(1-24x)^p(1-25x)^q(1-26x) \]

\(O(401^3\log L)\) 的矩阵快速幂。

5. UOJ 未知题号的简化版

CPOJ::master SS240226C

左拐度 \(\leq m\)\(n\) 节点二叉树计数,左拐度就是所有叶子到根的经过的左儿子的次数的最大值。令答案为 \([x^n]F_m(x)\)。快速刻画得到答案好像是这个:

\[F_m(x)=\frac{1}{1-xF_{m-1}(x)} \]

假装 \(F_m(x)=A_m(x)/B_m(x)\)。明显 \(A_m(x)=B_{m-1}(x)\),因为等一会要上下同乘 \(B_{m-1}(x)\)

\[F_m(x)=\frac{B_{m-1}(x)}{B_{m-1}(x)-xA_{m-1}(x)}=\frac{B_{m-1}(x)}{B_{m-1}(x)-xB_{m-2}(x)} \]

所以

\[B_m(x)=B_{m-1}(x)-xB_{m-2}(x) \]

矩阵快速幂优化递推。但是,这个矩阵的快速幂快不了一点!考虑插 \(m\) 个点值,因为 \(B_m(x)\) 的项数不超过 \(m\)

然后可以插回去,回去了以后 Bostan-Mori 算法。

五边形数定理

定义

五边形数定理:

\[Q(x)=\prod_{i=1}^{+\infty}(1-x^i)=\sum_{n=-\infty}^{+\infty}(-1)^nx^{(3n^2-n)/2} \]

\(n\) 个五边形数就是 \((3n^2-n)/2\)\(n\) 可以为负数。以下是 \(Q(x)\) 的前几项:

\[Q(x)=1-x-x^2+x^5+x^7-x^{12}-x^{15}\cdots \]

证明参见 五边形数定理的一种证明——visit_world

1. [NOI Online #1 入门组] 跑步

问有多少个单调不减的正整数序列的和恰好为 \(n\)。即求 \(n\) 的拆分数。记答案的生成函数为 \(P(x)\)

\[P(x)=\prod_{i=1}^{+\infty}\frac{1}{1-x^i}=\dfrac{1}{Q(x)} \]

所以直接对 \(Q(x)\) 求逆 \(O(n\log n)\)。但是更加好写的 \(O(n\sqrt n)\) 是说,因为 \(Q(x)\bmod x^{n+1}\) 只有 \(O(\sqrt n)\) 项(因为五边形数是 \(O(n^2)\) 的),考虑对 \(P(x)Q(x)\) 提取 \([x^n]\) 系数:

\[(1-x-x^2+x^5+x^7-x^{12}-x^{15}\cdots)(1+P_1x+P_2x^2+P_3x^3+P_4x^4\cdots)=1 \]

\[P_n-P_{n-1}-P_{n-2}+P_{n-5}+P_{n-7}+P_{n-12}+P_{n-15}\cdots=0\quad (n>0) \]

就是直接枚举左边看一下右边配哪一项。然后就可以递推了。每一个 \(P_n\) 都要求,\(O(n\sqrt n)\)

2. 完美的拆分

计数长为 \(n\) 的排列,恰有 \(k\) 个逆序对,多测,\(n\leq 10^9, k\leq 10^3, T\leq 10^2\)

首先这个排列,是按照值域从小到大插入数字。数字 \(i\) 可能产生 \(0\)\(i-1\) 个逆序对。\(i\)\(1\) 开始。

\[F(x)=\frac{(1-x)(1-x^2)(1-x^3)\cdots}{(1-x)^n} \]

分子用五边形数定理,分母保留前 \(k\) 项,我不管这玩意怎么做了。可能因为当时还没有 Bostan-Mori 算法,现在有了,直接暴力应用。

posted @ 2024-03-22 20:15  caijianhong  阅读(52)  评论(0编辑  收藏  举报