当前位置 博文首页 > pycr:总结:生成函数(斐波那契通项公式推导)
生成函数是什么啊?能吃吗?- 生成函数(generating function),又称母函数,是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。——oi-wiki
太晦涩了,简而言之,对于一个序列,其生成函数就是以这个序列为系数的多项式。- 举个栗子??:对于序列 \(A=<0,1,2,3,4,5,\ldots>\) ,其普通生成函数为 \(\sum_{i=0}^{+\infty}A_ix^i=\sum_{i=0}^{+\infty}ix^i\),而对于序列 \(B=<1,2,3,4,5,\ldots>\),其普通生成函数为 \(\sum_{i=0}^{+\infty}(i+1)x^i\)。
- 所以这玩意儿有什么用?
用处可大了,至少在我目前看来,生成函数就有两种作用:
- 能够计算一个序列的第 \(n\) 项的系数,可以用来求通项公式。
- 广泛运用于组合数学。
- 在生成函数的定义里面有一个词叫做形式幂级数。
能吃吗?
- 幂级数是指级数的每一项均为与级数项序号 \(n\) 相对应的以常数倍的 \((x?a)\) 的 \(n\:(n\in \N)\) 次方。
- 生成函数可以分为很多种,但是用的最广泛的还是普通生成函数和指数生成函数。
- \(Ordinary\:Generating\:Function,OGF\) :普通生成函数。定义为形式幂级数:
\[F(x)=\sum_{n\geq0}a_nx^n \]
每次计算都要写一长串的多项式或者写一个 \(\sum\),太麻烦了,有没有更好的方法?
自然是有的,我们发现:对于序列 \(<1,1,1,\ldots>\) 的普通生成函数 \(F(x)=\sum_{n\geq 0}x^n\) ,有
解得 \(F(x)=\frac{1}{1-x}\),所以我们可以用这个来代替原来琐碎的 \(\sum\) 并简化运算。
真是天衣无缝又十分扯淡
这种方法用的非常多,尤其是在求通项公式的时候,比如求斐波那契和卡特兰数的通项公式时就会用到。
- 但是我们将一个多项式变成封闭形式之后就无法得到第 \(n\) 项的系数了啊。但是没有关系,我们可以用二项式定理将其展开。
\(Generalized\:Binomial\:Theorem:\) 广义二项式定理:
其中 \(\left(\begin{matrix}\alpha\\k\end{matrix}\right)\) 为广义二项式系数(其实就是实数域下的组合数)
\(\alpha^{\underline k}\) 表示 \(\alpha\) 的 \(k\) 次下降幂,即 \(\alpha(\alpha-1)\ldots(\alpha-k+1)\)。上升幂类似。
举上面的那个栗子??,将 \(F(x)=\frac{1}{1-x}\) 展开:
那么 \(n\) 项的系数为
将广义二项式系数展开,上下约分得 \((-1)^n\) ,所以第 \(n\) 项的系数为 \(1\)。
\(Tips:\left(\begin{matrix}m\\n\end{matrix}\right)(-1)^n=\left(\begin{matrix}n-m-1\\n\end{matrix}\right)\),将广义二项式系数展开之后把 \(-1\) 代进去得上升幂再转下降幂即可。
用一个题目来简单说明一下:你有两个苹果??,三个梨子??,两个桃子??。问:拿五个水果共有几种方案?
我们分别写出 ?????? 的生成函数:
?? : \(1+x+x^2\)
?? : \(1+x+x^2+x^3\)
?? : \(1+x+x^2\)
其中 \(x\) 的指数表示这种水果拿多少个,我们将其乘起来之后,五次项(表示选五个)的系数即为问题的答案:
所以答案为 \(6\)。
- \(Exponential\:Generating\:Function,EGF\) :指数生成函数。定义为形式幂级数:
\[\hat F(x)=\sum_{n\geq 0} a_n\frac{x^n}{n!} \]
我们先反着来,先说展开
前置芝士??:泰勒展开
看到指数生成函数的阶乘分母有没有觉得很熟悉?
我们想到泰勒级数也同样具有作为分母的阶乘,那么我们可以考虑将某个函数泰勒展开。
考虑在 \(x_0=0\) 处用多项式去模拟 \(e^x\),将 \(e^x\) 取一阶导数、二阶导数、三阶导数……然后将 \(x_0=0\) 代入可得
为什么去模拟 \(e\) ?因为这玩意儿太好算了
所以我们将这个式子反过来就得到了序列 \(<1,1,1,1,\ldots>\) 的指数生成函数的封闭形式。
类似的,还有
- 为什么指数生成函数需要除以一个阶乘呢?这个阶乘有什么用?
- 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)——百度百科
斐波那契数列真是再熟悉不过的数列了,因为它比较简单,其每一项都等于前两项之和。所以其通项公式也比较容易得到。
我们设 \(F(x)=f_0+f_1x+f_2x^2+\ldots\) 为斐波那契数列的生成函数。则
解得 \(F(x)=\frac{x}{1-x-x^2}\) 。考虑到这是封闭形式,我们尝试用待定系数法将其化为广义二项式的形式并将其展开。
设:
通分然后用待定系数法:
解得:
那么:
所以我们就得到了斐波那契数列的通项公式:
- 卡特兰数,又称卡塔兰数,是组合数学中一种常出现于各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。1730年左右被蒙古族数学家明安图 (1692-1763)使用于对三角函数幂级数的推导而首次发现,1774年被发表在《割圜密率捷法》。——百度百科
完全不懂
简而言之,卡特兰数也是组合数学中十分重要的内容,其有多种计算公式:
以下一些问题的答案都是卡特兰数:
对④的一些理解:受网格图中容斥原理的启发,我们假设一开始在原点,\(1\) 代表向右上方走一步,\(0\) 代表向右下方走一步,那么最终都会走到 \((2n,0)\)。如果不考虑前缀和非负这一条件的话,那么方案数就为 \(C_{2n}^n\)。这时加上前缀和这一条件,我们发现,在该网格图中,纵坐标就代表着前缀和,那么合法的方案一定不会经过直线 \(y=-1\) 。换句话说,我们将 \((2n,0)\) 沿着 \(y=-1\) 翻折得到对称点 \((2n,-2)\),那么从 \((0,0)\) 到 \((2n,-2)\) 的每条路线就对应着原图中的一条不合法的路线,这样的路线一共有 \(C_{2n}^{n-1}\) 条,即有 \((n-1)\) 个 \(1\) 的序列数,减去即可。所以答案即为 \(C_{2n}^n-C_{2n}^{n-1}\),为卡特兰数组合公式 \(2\)。
为什么⑤是卡特兰数?其递推公式明明为 \(C_n=\sum_{i\geq 2}^{n-1}C_iC_{n-i+1}\)。我们考虑作以下变换:
将整个数列向左平移两个位置
其实有一种更为直观的理解:在求和的时候,\(i\) 的取值范围为 \(2\sim n-1\),而 \(n-i+1\) 则为 \(n-1\sim 2\),标准的卡特兰数。
知道卡特兰数的递推公式之后就好办了。
设 \(F(x)=C_0+C_1x+C_2x^2+\ldots\) 为卡特兰数的生成函数。则
解得 \(F(x)=\frac{1\pm\sqrt{1-4x}}{2x}\),因为 \(F(0)=C_0=1\),且
(具体参考洛必达法则)
所以 \(F(x)=\frac{1-\sqrt{1-4x}}{2x}\) 。
这才推了一点点
考虑将 \(\sqrt{1-4x}\) 广义二项式展开
而
所以
带回原式得到
所以卡特兰数的通项公式为
为组合公式 \(1\)
——2021年2月11日