生成函数初步
生成函数
简介
生成函数即母函数,是组合数学中尤其是计数方面的一个重要理论和工具。最早提出母函数的人是法国数学家LaplaceP.S.在其1812年出版的《概率的分析理论》中明确提出。 生成函数有普通型生成函数和指数型生成函数两种,其中普通型用的比较多。 生成函数的应用简单来说在于研究未知(通项)数列规律,用这种方法在给出递推式的情况下求出数列的通项,生成函数是推导Fibonacci数列的通项公式方法之一。 另外生成函数也广泛应用于编程与算法设计、分析上,运用这种数学方法往往对程序效率与速度有很大改进。
(——百度百科)
普通生成函数
定义
对于任意数列\(a_0,a_1,a_2...a_n\) 即用如下方法与一个函数联系起来:
则称G(x)是数列的生成函数(generating function)。
例子
比较典型的是:
序列\(a\)的普通生成函数(ordinary generating function,OGF)定义为形式幂级数:
\(a\)既可以是又穷序列,也可以是无穷序列。我们可以举个例子:(我们规定\(a\)以0为起点)
- 1.序列\(a=\{1,2,3\}\)的普通生成函数:\(1+2x+3x^2\)
- 2.序列\(a=\{1,1,1,...\}\)的普通生成函数:\(\sum_{n>=0}x^n\)
- 3.序列\(a={1,2,4,6,8,...}\)的生成函数是:\(\sum_{n>=0}2^nx^n\)
- 4.序列\(a={1,3,5,7,9,...}\)的生成函数是:\(\sum_{n>=0}(2n+1)x^n\)
我们可以这样来理解:每一项的此方项(幂级数)的前面的系数可以这样表示:假设这个序列有通项公式,那么其系数即为通项公式的地n项。
基本运算
谈到基本运算,相信大家都会和我一样想起实数集的四则运算,那么诚实地说,生成函数也是有的(数学家都喜欢这样类比......)
考虑两个序列:\(a,b\)的普通生成函数,分别记为\(F(x),G(x)\)。那么我们有如下运算——
因此我们可以说:\(F(x)\pm G(x)\)是序列\(\{a_n\pm b_n\}\)的生成函数。
那么我们不由得联想乘法:也就是被称为卷积的运算。
那么同样从公式来看:\(F(x)G(x)\)就是序列\(\{\sum_{i=0}^na_ib_n-i\}\)的生成函数
封闭形式(可以看作一种变换手段)
在运用生成函数时,我们有时不想一直使用形式幂级数的形式,所以我们就有了封闭形式用来化简。
举个例子:
\(\{1,1,1,...\}\)普通生成函数:\(F(x)=\sum_{n>=0}x^n\),我们会发现(可能看不出来,所以我告诉你<_<)
那么我们来化简一下这个方程:
我们就称上面这个式子叫\(\sum_{n>=0}x^n\)的封闭式。(擦,其实就是通项公式而已......我知道你们看到这里估计已经在直呼**了)
那么我们就用一下我们经常见到的序列来展示一下生成函数的威力和他美妙的地方:
斐波那契(Fibonacci sequence)
Fibonacci sequenced是定义的以下一个数列:\(a_0=1,a_1=1,a_n=a_n-1+a_n-2(n>1)\)那么,我们设他的普通生成函数叫\(Fib(x)\),根据他的递推形式,我们得到以下方程:
如何理解他呢?我做出如下解释:
可以这样写的原因:\(Fib(x)\)本质上是无穷多的,那么我们整体向右拓展2,他仍然是无穷的,可以理解为无影响(极限思想,我知道大家都懂的。只是为了水字。(上一句是假的))。
那么同理,他的封闭形式:
那么我们就开始求他的展开式了(求他的\(a_n\)的通项公式,也就是反推Fib通项公式)
Fibonacci sequence的展开(1)
我们设\(x+x^2\)为一个整体,那么:
Fibonacci sequence的展开(2)
这个是一种可以理解为暴力的做法:借一个待定系数方程组:
通个分:
待定系数列方程组:
各位解方程组吧,我就给个答案了:
(不管你们解没解,反正我裂开了......)
那么我们接下比例展开(贼劲爆):
这个就是所谓的斐波那契第二封闭形式(我起的名字......)(第一个在哪?你向上翻一下一下就明白了......)
其实,只要你数学够好,只要是通项公式,你都可以用生成函数干出来,这个是数学上一个非常nb的工具。(分局OI_WIKI,后面还有什么牛顿二项式和卡特兰数,这两个确实太难了,我就不写了,大家有空可以网上找一下,如果真的想看......留个评论,我来补QwQ)
指数生成函数
留个坑,以后补,今天裂开了......(2021,07,23)(如果真的想看的话,评论一下我就来搞......感谢支持了)