学习资源:
- 南京大学的学习视频 [算法竞赛入门] 生成函数:函数与数列之间的桥梁 (蒋炎岩)
视频里的内容有些错误,做了初步的修改。
本文可能有一些内容会错误,恳请斧正。
前置
- 多项式,如 f ( x ) = a x 2 + b x + c f(x)=ax^2+bx+c f(x)=ax2+bx+c
- 递推/数列,如 f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n)=f(n-1)+f(n-2) f(n)=f(n−1)+f(n−2)
- 无穷求和,如 0. 9 ˙ = 1 0.\dot9=1 0.9˙=1
三个问题的关联
- “无穷多项”的多项式
=
=
= 多项式+数列+无穷求和
f ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ = ∑ i ≥ 0 a i x i \begin{aligned} f(x)&=a_0+a_1x+a_2x^2+a_3x^3+\cdots\\ &=\sum_{i\ge0}a_ix^i \end{aligned} f(x)=a0+a1x+a2x2+a3x3+⋯=i≥0∑aixi
这里面有一个无穷数列 [ a 0 , a 1 , a 2 , ⋯ ] [a_0,a_1,a_2,\cdots] [a0,a1,a2,⋯]
我们把这个函数 f ( x ) f(x) f(x) 通过多项式的无穷求和和数列建立起了联系。
神奇的多项式
- 我们令
a
=
[
1
,
1
,
1
,
⋯
]
a=[1,1,1,\cdots]
a=[1,1,1,⋯]
此时 f ( x ) = 1 + x 2 + x 3 + ⋯ f(x)=1+x^2+x^3+\cdots f(x)=1+x2+x3+⋯
我们带入一些值进去,看看等于什么
f ( 1 ) = 1 + 1 + 1 + ⋯ = ∞ f(1)=1+1+1+\cdots=\infin f(1)=1+1+1+⋯=∞
f ( 1 2 ) = 1 + 1 2 + 1 4 + 1 8 + ⋯ f(\frac{1}{2})=1+\frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\cdots f(21)=1+21+41+81+⋯
当公比 q ≠ 1 q\ne1 q=1 时这就是一个等比数列求和公式:
f ( x ) = 1 − q ∞ 1 − q = { 1 q − 1 ∣ q ∣ < 1 ∞ ∣ q ∣ > 1 f(x)=\frac{1-q^\infin}{1-q}= \begin{cases} \frac{1}{q-1}&|q|<1\\ \infin&|q|>1 \end{cases} f(x)=1−q1−q∞={q−11∞∣q∣<1∣q∣>1
换句话说,我们得到了:
1 1 − x ↔ [ 1 , 1 , 1 , ⋯ ] \frac{1}{1-x}\leftrightarrow [1,1,1,\cdots] 1−x1↔[1,1,1,⋯] - 我们之前也学过其他一些函数的多项式展开:
s i n ( x ) ↔ [ 0 , 1 , 0 , − 1 3 ! , 0 , 1 5 ! , 0 , − 1 7 ! ⋯ ] e x ↔ [ 1 , 1 1 ! , 1 2 ! , 1 3 ! , ⋯ ] sin(x)\leftrightarrow [0,1,0,-\frac{1}{3!},0,\frac{1}{5!},0,-\frac{1}{7!}\cdots]\\ \ \\ e^x\leftrightarrow [1,\frac{1}{1!},\frac{1}{2!},\frac{1}{3!},\cdots] sin(x)↔[0,1,0,−3!1,0,5!1,0,−7!1⋯] ex↔[1,1!1,2!1,3!1,⋯] - 挑战:
F ( x ) = x + x 2 + 2 x 3 + 3 x 4 + 5 x 5 + 8 x 6 + ⋯ = ? F(x)=x+x^2+2x^3+3x^4+5x^5+8x^6+\cdots=? F(x)=x+x2+2x3+3x4+5x5+8x6+⋯=?
什么样的 F ( x ) F(x) F(x) 生成斐波那契数列?
F ( x ) = f ( 0 ) x 0 + f ( 1 ) x 1 + f ( 2 ) x 2 + ⋯ x F ( x ) = f ( 0 ) x 1 + f ( 1 ) x 2 + f ( 2 ) x 3 + ⋯ x 2 F ( x ) = f ( 0 ) x 2 + f ( 1 ) x 3 + f ( 2 ) x 4 + ⋯ \begin{aligned} F(x)&=f(0)x^0+f(1)x^1+f(2)x^2+\cdots\\ xF(x)&=\qquad \qquad f(0)x^1+f(1)x^2+f(2)x^3+\cdots\\ x^2F(x)&=\qquad \qquad \qquad \qquad f(0)x^2+f(1)x^3+f(2)x^4+\cdots\\ \end{aligned} F(x)xF(x)x2F(x)=f(0)x0+f(1)x1+f(2)x2+⋯=f(0)x1+f(1)x2+f(2)x3+⋯=f(0)x2+f(1)x3+f(2)x4+⋯
可以看到,第三行加第二行可以把第一行后面的大部分内容给消掉,得到:
( 1 − x − x 2 ) F ( x ) = x (1-x-x^2)F(x)=x (1−x−x2)F(x)=x
故,最终答案为:
F ( x ) = x 1 − x − x 2 F(x)=\frac{x}{1-x-x^2} F(x)=1−x−x2x
因此,得到了:
x 1 − x − x 2 ↔ [ 0 , 1 , 1 , 2 , 3 , 5 , 8 , ⋯ ] \frac{x}{1-x-x^2}\leftrightarrow [0,1,1,2,3,5,8,\cdots] 1−x−x2x↔[0,1,1,2,3,5,8,⋯]
数列的 ⌈ \lceil ⌈生成函数 ⌋ \rfloor ⌋
- 生成函数:函数与数列之间的桥梁。
我们可以用函数表示各种数列:
c ⋅ F ( x ) → 数 列 倍 增 x ⋅ F ( x ) → 数 列 右 移 [ F ( x ) − f ( 0 ) ] / x → 数 列 左 移 F 1 ( x ) ± F 2 ( x ) → 数 列 求 和 / 差 F ′ ( x ) → 数 列 乘 幂 次 + 左 移 F 1 ( x ) ⋅ F 2 ( x ) → 数 列 卷 积 \begin{aligned} c\cdot F(x)&\rightarrow 数列倍增 \\ x\cdot F(x)&\rightarrow 数列右移 \\ [F(x)-f(0)]/x&\rightarrow 数列左移 \\ F_1(x)\pm F_2(x)&\rightarrow 数列求和/差 \\ F^\prime(x) &\rightarrow 数列乘幂次+左移\\ F_1(x)\cdot F_2(x)&\rightarrow 数列卷积 \end{aligned} c⋅F(x)x⋅F(x)[F(x)−f(0)]/xF1(x)±F2(x)F′(x)F1(x)⋅F2(x)→数列倍增→数列右移→数列左移→数列求和/差→数列乘幂次+左移→数列卷积
举些例子:
1 1 − x ↔ [ 1 , 1 , 1 , ⋯ ] x 1 − x − x 2 ↔ [ 0 , 1 , 1 , 2 , 3 , 5 , 8 , ⋯ ] 1 1 − x + x 1 − x − x 2 ↔ [ 1 , 2 , 2 , 3 , 4 , 6 , 9 , ⋯ , f ( n ) + 1 , ⋯ ] x ( 1 1 − x + x 1 − x − x 2 ) ↔ [ 0 , 1 , 2 , 2 , 3 , ⋯ , f ( n + 1 ) + 1 , ⋯ ] 2 1 − x ↔ [ 2 , 2 , 2 , ⋯ ] 1 1 − a x ↔ [ 1 , a , a 2 , a 3 , a 4 , ⋯ ] \begin{aligned} \frac{1}{1-x} &\leftrightarrow [1,1,1,\cdots]\\ \frac{x}{1-x-x^2} &\leftrightarrow [0,1,1,2,3,5,8,\cdots] \\ \frac{1}{1-x}+\frac{x}{1-x-x^2} &\leftrightarrow [1,2,2,3,4,6,9,\cdots,f(n)+1,\cdots] \\ x(\frac{1}{1-x}+\frac{x}{1-x-x^2}) &\leftrightarrow [0,1,2,2,3,\cdots,f(n+1)+1,\cdots] \\ \frac{2}{1-x} &\leftrightarrow [2,2,2,\cdots]\\ \frac{1}{1-ax} &\leftrightarrow [1,a,a^2,a^3,a^4,\cdots]\\ \end{aligned} 1−x11−x−x2x1−x1+1−x−x2xx(1−x1+1−x−x2x)1−x21−ax1↔[1,1,1,⋯]↔[0,1,1,2,3,5,8,⋯]↔[1,2,2,3,4,6,9,⋯,f(n)+1,⋯]↔[0,1,2,2,3,⋯,f(n+1)+1,⋯]↔[2,2,2,⋯]↔[1,a,a2,a3,a4,⋯] - 我们这里主要关注 数列卷积
假设我们有两个无穷多项式:
F ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ G ( x ) = b 0 + b 1 x + b 2 x 2 + b 3 x 3 + ⋯ \begin{aligned} F(x)&=a_0+a_1x+a_2x^2+a_3x^3+\cdots\\ G(x)&=b_0+b_1x+b_2x^2+b_3x^3+\cdots\\ \end{aligned} F(x)G(x)=a0+a1x+a2x2+a3x3+⋯=b0+b1x+b2x2+b3x3+⋯
我们想知道 F ⋅ G F\cdot G F⋅G 是什么?
F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 1 b 0 + a 0 b 1 ) x + ⋯ + ( ∑ i = 0 n a i b n − i ) x n + ⋯ F(x)\cdot G(x)=a_0b_0+(a_1b_0+a_0b_1)x+\cdots+\Big(\sum_{i=0}^n a_ib_{n-i}\Big)x^n+\cdots F(x)⋅G(x)=a0b0+(a1b0+a0b1)x+⋯+(i=0∑naibn−i)xn+⋯ - 试一试以下的例子
F ( x ) ⋅ 1 1 − x F(x)\cdot \frac{1}{1-x} F(x)⋅1−x1
我们已经知道了
F ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ 1 1 − x = 1 + x + x 2 + x 3 + ⋯ \begin{aligned} F(x)&=a_0+a_1x+a_2x^2+a_3x^3+\cdots\\ \frac{1}{1-x}&=1+x+x^2+x^3+\cdots\\ \end{aligned} F(x)1−x1=a0+a1x+a2x2+a3x3+⋯=1+x+x2+x3+⋯
我们套卷积的式子,得到:
F ( x ) ⋅ 1 1 − x = a 0 + ( a 0 + a 1 ) x + ⋯ + ( ∑ i = 0 n a i ) x n + ⋯ F(x)\cdot \frac{1}{1-x}=a_0+(a_0+a_1)x+\cdots+\Big(\sum_{i=0}^n a_i\Big)x^n+\cdots F(x)⋅1−x1=a0+(a0+a1)x+⋯+(i=0∑nai)xn+⋯ - 例子:
求
S n = ∑ i = 1 n i 2 S_n=\sum_{i=1}^n i^2 Sn=i=1∑ni2
我们用生成函数做:
1 1 − x ↔ [ 1 , 1 , 1 , 1 , 1 , 1 ⋯ ] 1 ( 1 − x ) 2 ↔ [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , ⋯ ] 1 ( 1 − x ) 3 ↔ [ 1 , 3 , 6 , 10 , 15 , ⋯ ] 三 角 形 数 列 x ( 1 − x ) 3 ↔ [ 0 , 1 , 3 , 6 , 10 , 15 , ⋯ ] 向 右 移 项 1 + x ( 1 − x ) 3 ↔ [ 1 , 4 , 9 , 16 , 25 , ⋯ ] 相 加 得 到 正 方 形 数 列 x ( 1 + x ) ( 1 − x ) 4 ↔ [ 0 , 1 , 5 , 14 , 28 , 53 , ⋯ ] 所 求 \begin{aligned} \frac{1}{1-x} &\leftrightarrow [1,1,1,1,1,1\cdots]\\ \frac{1}{(1-x)^2} &\leftrightarrow [1,2,3,4,5,6,7,\cdots]\\ \frac{1}{(1-x)^3} &\leftrightarrow [1,3,6,10,15,\cdots]三角形数列\\ \frac{x}{(1-x)^3} &\leftrightarrow [0,1,3,6,10,15,\cdots]向右移项\\ \frac{1+x}{(1-x)^3} &\leftrightarrow [1,4,9,16,25,\cdots]相加得到正方形数列\\ \frac{x(1+x)}{(1-x)^4} &\leftrightarrow [0,1,5,14,28,53,\cdots]所求\\ \end{aligned} 1−x1(1−x)21(1−x)31(1−x)3x(1−x)31+x(1−x)4x(1+x)↔[1,1,1,1,1,1⋯]↔[1,2,3,4,5,6,7,⋯]↔[1,3,6,10,15,⋯]三角形数列↔[0,1,3,6,10,15,⋯]向右移项↔[1,4,9,16,25,⋯]相加得到正方形数列↔[0,1,5,14,28,53,⋯]所求
我们得到了一个生成函数:
x ( 1 − x ) 4 + x 2 ( 1 − x ) 4 \frac{x}{(1-x)^4}+\frac{x^2}{(1-x)^4} (1−x)4x+(1−x)4x2
利用超纲知识???我们知道了 ( 1 − x ) − 4 (1-x)^{-4} (1−x)−4 是 [ C n + 3 3 ] [C_{n+3}^3] [Cn+33]
所以最终
S n = C n + 2 3 + C n + 1 3 = n ( n + 1 ) ( 2 n + 1 ) 6 S_n=C_{n+2}^3+C_{n+1}^3=\frac{n(n+1)(2n+1)}{6} Sn=Cn+23+Cn+13=6n(n+1)(2n+1)
更多的生成函数
- 指数生成函数:
F ( x ) = a 0 + a 1 x + a 2 x 2 2 ! + a 3 x 3 3 ! + ⋯ F(x)=a_0+a_1x+a_2\frac{x^2}{2!}+a_3\frac{x^3}{3!}+\cdots F(x)=a0+a1x+a22!x2+a33!x3+⋯ - 狄利克雷级数生成函数
F ( s ) = a 1 + a 2 2 s + a 3 3 s + a 4 4 s + ⋯ F(s)=a_1+\frac{a_2}{2^s}+\frac{a_3}{3^s}+\frac{a_4}{4^s}+\cdots F(s)=a1+2sa2+3sa3+4sa4+⋯ -
F
⋅
G
F\cdot G
F⋅G 的推导
指数生成函数卷积推导:
F ( x ) = a 0 + a 1 x + a 2 x 2 2 ! + a 3 x 3 3 ! + ⋯ G ( x ) = b 0 + b 1 x + b 2 x 2 2 ! + b 3 x 3 3 ! + ⋯ F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) x + 第 三 项 + ( a 0 b 4 4 ! 0 ! + a 1 b 3 3 ! 1 ! + a 2 b 2 2 ! 2 ! + a 3 b 1 3 ! 1 ! + a 4 b 0 4 ! 0 ! ) x 4 + ⋯ F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) x + ⋯ + ( ∑ i = 0 n a i b n − i ⋅ n ! i ! ( n − i ) ! ) x n n ! + ⋯ F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) x + ⋯ + ( ∑ i = 0 n C n i a i b n − i ) x n n ! + ⋯ \begin{aligned} F(x)&=a_0+a_1x+a_2\frac{x^2}{2!}+a_3\frac{x^3}{3!}+\cdots\\ G(x)&=b_0+b_1x+b_2\frac{x^2}{2!}+b_3\frac{x^3}{3!}+\cdots\\ F(x)\cdot G(x)&=a_0b_0+(a_0b_1+a_1b_0)x+第三项+(\frac{a_0b_4}{4!0!}+\frac{a_1b_3}{3!1!}+\frac{a_2b_2}{2!2!}+\frac{a_3b_1}{3!1!}+\frac{a_4b_0}{4!0!})x^4+\cdots\\ F(x)\cdot G(x)&=a_0b_0+(a_0b_1+a_1b_0)x+\cdots+\Big(\sum_{i=0}^n \frac{a_ib_{n-i}\cdot n!}{i!(n-i)!}\Big)\frac{x^n}{n!}+\cdots\\ F(x)\cdot G(x)&=a_0b_0+(a_0b_1+a_1b_0)x+\cdots+\Big(\sum_{i=0}^n C_n^ia_ib_{n-i}\Big)\frac{x^n}{n!}+\cdots\\ \end{aligned} F(x)G(x)F(x)⋅G(x)F(x)⋅G(x)F(x)⋅G(x)=a0+a1x+a22!x2+a33!x3+⋯=b0+b1x+b22!x2+b33!x3+⋯=a0b0+(a0b1+a1b0)x+第三项+(4!0!a0b4+3!1!a1b3+2!2!a2b2+3!1!a3b1+4!0!a4b0)x4+⋯=a0b0+(a0b1+a1b0)x+⋯+(i=0∑ni!(n−i)!aibn−i⋅n!)n!xn+⋯=a0b0+(a0b1+a1b0)x+⋯+(i=0∑nCniaibn−i)n!xn+⋯
狄利克雷级数卷积推导:
F ( s ) = a 1 + a 2 2 s + a 3 3 s + a 4 4 s + ⋯ G ( s ) = b 1 + b 2 2 s + b 3 3 s + b 4 4 s + ⋯ F ( s ) ⋅ G ( s ) = a 1 b 1 + ( a 1 b 2 + a 2 b 1 ) / 2 s + ⋯ + ( a 1 b 18 + a 2 b 9 + a 3 b 6 + a 6 b 3 + a 9 b 2 + a 18 b 1 ) / 1 8 s + ⋯ F ( s ) ⋅ G ( s ) = a 1 b 1 + ( a 1 b 2 + a 2 b 1 ) / 2 s + ⋯ + ( ∑ i × j = n a i b j ) / n s + ⋯ F ( s ) ⋅ G ( s ) = ∑ n ≥ 1 ( ∑ d ∣ n a d b n / d ) / n s \begin{aligned} F(s)&=a_1+\frac{a_2}{2^s}+\frac{a_3}{3^s}+\frac{a_4}{4^s}+\cdots\\ G(s)&=b_1+\frac{b_2}{2^s}+\frac{b_3}{3^s}+\frac{b_4}{4^s}+\cdots\\ F(s)\cdot G(s) &= a_1b_1+(a_1b_2+a_2b_1)/2^s+\cdots+(a_1b_{18}+a_2b_9+a_3b_6+a_6b_3+a_9b_2+a_{18}b_1)/18^s+\cdots\\ F(s)\cdot G(s) &=a_1b_1+(a_1b_2+a_2b_1)/2^s+\cdots+\Big(\sum_{i\times j=n}a_ib_j\Big)/n^s+\cdots\\ F(s)\cdot G(s)&=\sum_{n\ge1}\Big(\sum_{d|n}a_db_{n/d}\Big)/n^s \end{aligned} F(s)G(s)F(s)⋅G(s)F(s)⋅G(s)F(s)⋅G(s)=a1+2sa2+3sa3+4sa4+⋯=b1+2sb2+3sb3+4sb4+⋯=a1b1+(a1b2+a2b1)/2s+⋯+(a1b18+a2b9+a3b6+a6b3+a9b2+a18b1)/18s+⋯=a1b1+(a1b2+a2b1)/2s+⋯+(i×j=n∑aibj)/ns+⋯=n≥1∑(d∣n∑adbn/d)/ns -
R
i
e
m
a
n
n
′
s
Z
e
t
a
F
u
n
c
t
i
o
n
Riemann's\ Zeta\ Function
Riemann′s Zeta Function 黎曼函数
ζ ( s ) = 1 + 1 2 s + 1 3 s + ⋯ \zeta(s)=1+\frac{1}{2^s}+\frac{1}{3^s}+\cdots ζ(s)=1+2s1+3s1+⋯
其实就是狄利克雷级数,数列为 [ 1 , 1 , 1 , ⋯ ] [1,1,1,\cdots] [1,1,1,⋯]
还有一些性质:
ζ 2 ( s ) = d ( 1 ) + d ( 2 ) 2 s + d ( 3 ) 3 s + ⋯ 1 ζ ( s ) = μ ( 1 ) + μ ( 2 ) 2 s + μ ( 3 ) 3 s + ⋯ \zeta^2(s)=d(1)+\frac{d(2)}{2^s}+\frac{d(3)}{3^s}+\cdots\\ \frac{1}{\zeta(s)}=\mu(1)+\frac{\mu(2)}{2^s}+\frac{\mu(3)}{3^s}+\cdots ζ2(s)=d(1)+2sd(2)+3sd(3)+⋯ζ(s)1=μ(1)+2sμ(2)+3sμ(3)+⋯
唯一的例题
- 求长度为
n
n
n 的
01
01
01 字符串中不可分解字符串的个数
不可分解指不能写成两个或多个相同字符串的拼接。 - 设
f
(
n
)
f(n)
f(n) 是不能分解的个数。
因为如果一个串有循环节 2 2 2 和循环节 3 3 3 ,那么其最小循环节为 1 1 1。
2 n = ∑ d ∣ n f ( d ) 2^n=\sum_{d|n}f(d) 2n=∑d∣nf(d)
然后根据莫比乌斯反演去得到 (感觉视频里的式子写错了)
f ( n ) = ∑ d ∣ n μ ( d ) 2 n d f(n)=\sum_{d|n}\mu(d)2^{\frac{n}{d}} f(n)=d∣n∑μ(d)2dn