生成函数生成果,生成数下你和我。
生成函数太美妙,蒟蒻一看被难倒。
B y — — C h a l o t t o \qquad\qquad\quad\mathscr{By——Chalotto} By——Chalotto
*度娘定义:
生成函数又叫 母函数 ( 个人不太喜欢这个叫法 ),是组合数学中尤其是计数方面的一个重要理论和工具。
生成函数分为 普通型生成函数 和 指数型生成函数 两种,前者使用较多。形式上说,普通型生成函数用于解决多重集的组合问题,而指数型母函数用于解决多重集的排列问题。
生成函数的应用简单来说在于研究未知(通项)数列规律,用这种方法在给出递推式的情况下求出数列的通项,生成函数是推导 F i b o n a c c i Fibonacci Fibonacci 数列的通项公式方法之一,另外组合数学中的 C a t a l a n Catalan Catalan 数也可以通过生成函数的方法得到。
另外生成函数也广泛应用于编程与算法设计、分析上,运用这种数学方法往往对程序效率与速度有很大改进。
定义:
对于任意数列 a 0 , a 1 , a 2 , … , a n a_0,a_1,a_2,\dots ,a_n a0,a1,a2,…,an 用下面这个函数来表示这个数列: G ( x ) = ∑ i = 0 ∞ a i x i = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ + a n x n … G(x)=\sum_{i=0}^{\infty}a_ix^i=a_0+a_1x+a_2x^2+a_3x^3+\dots+a_nx^n\dots G(x)=i=0∑∞aixi=a0+a1x+a2x2+a3x3+⋯+anxn…这个函数就叫做数列的 生成函数 ( g e n e r a t i n g f u n c t i o n generating\ function generating function ) 。
定义:
对于任意数列 h 0 , h 1 , h 2 , … , h n h_0,h_1,h_2,\dots,h_n h0,h1,h2,…,hn 用下面这个函数来表示这个数列: G ( x ) = ∑ i = 0 ∞ h i x i i ! = h 0 + h 1 + h 2 x + h 3 x 2 2 ! + ⋯ + h n x n n ! + … G(x)=\sum_{i=0}^{\infty}h_i\frac{x^i}{i!}=h_0+h_1+h_2x+h_3\frac{x^2}{2!}+\dots+h_n\frac{x^n}{n!}+\dots G(x)=i=0∑∞hii!xi=h0+h1+h2x+h32!x2+⋯+hnn!xn+…
T i p s : \mathscr{Tips:} Tips:在研究生成函数时,我们都假设级数收敛,因为生成函数中的 x x x 没有实际意义。
我们先来考虑这样的一个问题:一个班上有四个 M M MM MM ,现在要从其中选出 n n n 个做自己的老婆,请问有多少种选法? 答案很简单, ( 4 n ) \binom{4}{n} (n4) 对吧。也就是说从 i = 0 i=0 i=0 开始, 问题的答案分别是 1 , 4 , 6 , 4 , 1 , 0 , 0 , 0 , … 1,4,6,4,1,0,0,0,\dots 1,4,6,4,1,0,0,0,… 那么它的生成函数应该为 G ( x ) = 1 + 4 x + 6 x 2 + 4 x 3 + x 4 G(x)=1+4x+6x^2+4x^3+x^4 G(x)=1+4x+6x2+4x3+x4 。诶,这不就是二项式展开吗? 于是就有 G ( x ) = ( 1 + x ) 4 G(x)=(1+x)^4 G(x)=(1+x)4 。
这里有个广义的推论: ( 1 + x ) k = ( k 0 ) x 0 + ( k 1 ) x 1 + ⋯ + ( k k ) x k + … (1+x)^k=\binom k 0x^0+\binom k 1x^1+\dots+\binom k kx^k+\dots (1+x)k=(0k)x0+(1k)x1+⋯+(kk)xk+… ,其中,广义的组合数 ( k i ) = k ( k − 1 ) ( k − 2 ) … ( k − i + 1 ) i ! \binom k i=\frac{k(k-1)(k-2)\dots(k-i+1)}{i!} (ik)=i!k(k−1)(k−2)…(k−i+1) 且 k k k 为 实数 。
举个例子: ( 4 6 ) = 4 × 3 × 2 × 1 × 0 × ( − 1 ) 6 ! = 0 , ( − 1.4 2 ) = ( − 1.4 ) × ( − 2.4 ) 2 ! = 1.68 \binom4 6=\frac{4\times3\times2\times1\times0\times(-1)}{6!}=0,\binom{-1.4}2=\frac{(-1.4)\times(-2.4)}{2!}=1.68 (64)=6!4×3×2×1×0×(−1)=0,(2−1.4)=2!(−1.4)×(−2.4)=1.68
这个推论就是经典的 牛顿二项式定理 。
接下来我们再来考虑一个更复杂的生成函数: 求出 x 1 + x 2 + ⋯ + x k = n x_1+x_2+\dots+x_k=n x1+x2+⋯+xk=n 有多少个非负整数解。这道题在 C h t y _ s y q Chty\_syq Chty_syq 的课件中有详细解答过。
把每组解的每个数加 1 1 1 ,就变成了 x 1 + x 2 + ⋯ + x k = n + k x_1+x_2+\dots+x_k=n+k x1+x2+⋯+xk=n+k 的正整数解的个数了,这时候我们就可以用 隔板法 来做: 把 n + k n+k n+k 个东西排成一排,在 n + k − 1 n+k-1 n+k−1 个间隔中插入 k − 1 k-1 k−1 个 “隔板” ,所以答案就是 ( n + k − 1 k − 1 ) = ( n + k − 1 n ) \binom{n+k-1}{k-1}=\binom{n+k-1}{n} (k−1n+k−1)=(nn+k−1) ,则它关于 n n n 的生成函数是 G ( x ) = ( 1 − x ) − k G(x)=(1-x)^{-k} G(x)=(1−x)−k 。
推导:
将 ( 1 − x ) − k (1-x)^{-k} (1−x)−k 按照牛顿二项式展开后可以得到 x n x^n xn 的系数恰好是 ( n + k − 1 n ) \binom{n+k-1}{n} (nn+k−1)
因为展开后第n+1项: ( − k n ) ( − x ) n = [ ( − 1 ) n ( n + k − 1 n ) ] [ ( − 1 ) n x n ] = ( n + k − 1 n ) x n \binom{-k}{n}(-x)^n=[(-1)^n\binom{n+k-1}{n}][(-1)^nx^n]=\binom{n+k-1}{n}x^n (n−k)(−x)n=[(−1)n(nn+k−1)][(−1)nxn]=(nn+k−1)xn
在接下来的讲解之前,我们还需要知道一个公式: ∑ i = 0 ∞ x i = 1 1 − x \sum_{i=0}^\infty x^i=\frac 1{1-x} i=0∑∞xi=1−x1这个公式在之前我已经证明过了,再证一遍: 已 知 等 比 数 列 求 和 公 式 : ∑ i = 0 n x i = 1 − x n + 1 1 − x ∵ − 1 < x < 1 ∴ lim n → ∞ x n + 1 = 0 ∴ ∑ i = 0 ∞ x i = lim n → ∞ ∑ i = 0 n x i = lim n → ∞ 1 − x n + 1 1 − x = 1 1 − x \begin{aligned}&已知等比数列求和公式:\sum_{i=0}^n x^i=\frac{1-x^{n+1}}{1-x}\\ &\because -1
已知 F i b o n a c c i Fibonacci Fibonacci 递推数列为: F ( n ) = F ( n − 1 ) + F ( n − 2 ) ( n ⩾ 3 ) F 2 = F 1 = 1 \begin{aligned}&F(n)=F(n-1)+F(n-2)\qquad( n\geqslant 3)\\&F_2=F_1=1\end{aligned} F(n)=F(n−1)+F(n−2)(n⩾3)F2=F1=1设它的生成函数为 g ( x ) g(x) g(x) ,则 g ( x ) g(x) g(x) 为: g ( x ) = x + x 2 + 2 x 3 + 3 x 4 + … = F 1 + F 2 x 2 + F 3 x 3 + … \begin{aligned}g(x)&=x+x^2+2x^3+3x^4+\dots\\&=F_1+F_2x^2+F_3x^3+\dots\end{aligned} g(x)=x+x2+2x3+3x4+…=F1+F2x2+F3x3+…两边同时乘以 x x x: x ⋅ g ( x ) = x 2 + x 3 + 2 x 4 + 3 x 5 + … x\cdot g(x)=x^2+x^3+2x^4+3x^5+\dots x⋅g(x)=x2+x3+2x4+3x5+…用上式减下式可得: g ( x ) − x ⋅ g ( x ) = x + x 3 + x 4 + 2 x 5 + 3 x 6 + ⋯ = x + x 2 ⋅ g ( x ) g(x)-x\cdot g(x)=x+x^3+x^4+2x^5+3x^6+\dots=x+x^2\cdot g(x) g(x)−x⋅g(x)=x+x3+x4+2x5+3x6+⋯=x+x2⋅g(x)解得, g ( x ) = x 1 − x − x 2 g(x)=\frac x{1-x-x^2} g(x)=1−x−x2x 。
由于这个式子不是之前我们见过的 x x x 成等比关系的式子,再根据这是个分式,于是我们可以把它裂项成等比数列无穷级数求和的式子,将下半部分因式分解可得: g ( x ) = x ( 1 − 1 − 5 2 x ) ( 1 − 1 + 5 2 x ) g(x)=\frac{x}{(1-\frac{1-\sqrt 5}2x)(1-\frac{1+\sqrt 5}2x)} g(x)=(1−21−5x)(1−21+5x)x再转变成和的形式: 设 g ( x ) = x ( 1 − 1 − 5 2 x ) ( 1 − 1 + 5 2 x ) = a ( 1 − 1 − 5 2 x ) + b ( 1 − 1 + 5 2 x ) 通 分 一 下 得 到 , g ( x ) = ( 1 − 1 + 5 2 x ) a + ( 1 − 1 − 5 2 x ) b ( 1 − 1 − 5 2 x ) ( 1 − 1 + 5 2 x ) ∴ ( 1 − 1 + 5 2 x ) a + ( 1 − 1 − 5 2 x ) b = x 又 根 据 g ( x ) = 0 可 以 得 到 方 程 组 : { ( 1 − 1 + 5 2 x ) a + ( 1 − 1 − 5 2 x ) b = x ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ① a + b = 0 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ② 将 ② 带 回 到 ① 中 可 以 得 到 , a = − 1 5 ∴ b = 1 5 ⇒ g ( x ) = 1 5 1 ( 1 − 1 + 5 2 x ) − 1 5 1 ( 1 − 1 − 5 2 x ) 将 其 还 原 成 数 列 展 开 得 , g ( x ) = 1 5 ( 1 + 5 2 x + ( 1 + 5 2 ) 2 x 2 + ⋯ + ( 1 + 5 2 ) n x n + … ) − 1 5 ( 1 − 5 2 x + ( 1 − 5 2 ) 2 x 2 + ⋯ + ( 1 − 5 2 ) n x n + … ) g ( x ) = F 1 + F 2 x 2 + F 3 x 3 + ⋯ + F n x n + … 于 是 我 们 可 以 得 到 F i b o n a c c i 的 通 项 公 式 : F n = 1 5 ( 1 + 5 2 ) n − 1 5 ( 1 − 5 2 ) n \begin{aligned}&设g(x)=\frac{x}{(1-\frac{1-\sqrt 5}2x)(1-\frac{1+\sqrt 5}2x)}=\frac a{(1-\frac{1-\sqrt 5}2x)}+\frac b{(1-\frac{1+\sqrt 5}2x)}\\&通分一下得到,\\&g(x)=\frac{(1-\frac{1+\sqrt 5}2x)a+(1-\frac{1-\sqrt 5}2x)b}{(1-\frac{1-\sqrt 5}2x)(1-\frac{1+\sqrt 5}2x)}\\&\therefore (1-\frac{1+\sqrt 5}2x)a+(1-\frac{1-\sqrt 5}2x)b=x\\&又根据g(x)=0可以得到方程组:\\&\begin{cases}(1-\frac{1+\sqrt 5}2x)a+(1-\frac{1-\sqrt 5}2x)b=x&·······①\\a+b=0&·······②\end{cases}\\&将②带回到①中可以得到,a=-\frac 1{\sqrt 5}\\&\therefore b=\frac 1{\sqrt 5}\\&\Rightarrow g(x)=\frac 1{\sqrt 5}\frac 1{(1-\frac{1+\sqrt 5}2x)}-\frac 1{\sqrt 5}\frac 1{(1-\frac{1-\sqrt 5}2x)}\\&将其还原成数列展开得,\\&g(x)=\frac 1{\sqrt 5}(\frac{1+\sqrt 5}2x+(\frac{1+\sqrt 5}2)^2x^2+\dots+(\frac{1+\sqrt 5}2)^nx^n+\dots)-\frac 1{\sqrt 5}(\frac{1-\sqrt 5}2x+(\frac{1-\sqrt 5}2)^2x^2+\dots+(\frac{1-\sqrt 5}2)^nx^n+\dots)\\&g(x)=F_1+F_2x^2+F_3x^3+\dots+F_nx^n+\dots\\&于是我们可以得到\ Fibonacci\ 的通项公式:\\&F_n=\frac{1}{\sqrt{5}}\left(\frac{1+\sqrt{5}}{2}\right)^{n}-\frac{1}{\sqrt{5}}\left(\frac{1-\sqrt{5}}{2}\right)^{n}\end{aligned} 设g(x)=(1−21−5x)(1−21+5x)x=(1−21−5x)a+(1−21+5x)b通分一下得到,g(x)=(1−21−5x)(1−21+5x)(1−21+5x)a+(1−21−5x)b∴(1−21+5x)a+(1−21−5x)b=x又根据g(x)=0可以得到方程组:{(1−21+5x)a+(1−21−5x)b=xa+b=0⋅⋅⋅⋅⋅⋅⋅①⋅⋅⋅⋅⋅⋅⋅②将②带回到①中可以得到,a=−51∴b=51⇒g(x)=51(1−21+5x)1−51(1−21−5x)1将其还原成数列展开得,g(x)=51(21+5x+(21+5)2x2+⋯+(21+5)nxn+…)−51(21−5x+(21−5)2x2+⋯+(21−5)nxn+…)g(x)=F1+F2x2+F3x3+⋯+Fnxn+…于是我们可以得到 Fibonacci 的通项公式:Fn=51(21+5)n−51(21−5)n哎呦卧槽,这可把我码的累死了!!!