生成函数入门

Posted cbdsopa的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成函数入门相关的知识,希望对你有一定的参考价值。

普通生成函数

对于一个序列 \\(a\\) ,其生成函数形如(本质上是个多项式):

\\[F(x)=\\sum_na_nx^n \\]

用通俗一点的话来解释生成函数这个概念,其实就是把序列按照编号从小到大的顺序放到多项式次数从低到高的系数里。所以说,如果该序列有通项公式,那么其生成函数的系数就是通项公式。

又由于生成函数的本质是多项式,所以其加法和乘法等运算皆与多项式相同。

生成函数的封闭形式

我们发现对于 \\(<1,1,1,1,...>\\) 的生成函数

\\(F(x)=1+x+x^2+...\\)

\\(xF(x)=x+x^2+x^3+...\\)

那么不难发现,因为序列无穷长,其满足 \\(xF(x)+1=F(x)\\) ,可解得 \\(F(x)=\\frac11-x\\) ,这个解出来的东西一般称为一个生成函数的封闭形式。

再来看一个 \\(<1,a,a^2,a^3,...>\\) 的生成函数

\\(F(x)=1+ax+a^2x^2...\\)

\\(axF(x)=ax+a^2x^2+a^3x^3+...\\)

然后就有 \\(axF(x)+1=F(x)\\) ,又可解得 \\(F(x)=\\frac11-ax\\)

然后我们来做一下 OI wiki 上的例题:

求出下面数列的普通生成函数(两种形式表示)

\\(1.a=<0,1,1,1,1,...>\\)

\\(2.a=<1,0,1,0,1,...>\\)

\\(3.a=<1,2,3,4,5,...>\\)

\\(4.a_n=\\big(^m_n\\big)\\) (\\(m\\) 为常数,\\(n\\ge 0\\))

\\(5.a_n=\\big(^n+m_n\\big)\\) (\\(m\\) 为常数,\\(n\\ge 0\\))

一个一个来
\\((1)\\)

\\(F(x)=x+x^2+x^3...\\)

\\(xF(x)=x^2+x^3+x^4+...\\)

所以得到 \\(xF(x)+x=F(x)\\) ,得:

\\[F(x)=\\sum_n\\ge1x^n=\\fracx1-x \\]

\\((2)\\)

\\(F(x)=x^0+x^2+x^4+...\\)

\\(xF(x)=x^1+x^3+x^5+...\\)

可以看出 \\(F(x)+xF(x)=\\sum_n\\ge 0x^n=\\frac11-x\\)

所以得到:

\\[F(x)=\\sum_n\\ge 0x^2n=\\frac1(1-x)(1+x)=\\frac11-x^2 \\]

\\((3)\\)

\\(F(x)=1+2x+3x^2+...\\)

\\(xF(x)=x+2x^2+3x^3+...\\)

可以发现 \\(F(x)=xF(x)+\\sum_n\\ge 0x^n=xF(x)+\\frac11-x\\)

解得:

\\[F(x)=\\sum_n\\ge 0(n+1)x^n=\\frac1(1-x)^2 \\]

\\((4)\\)

直接用二项式定理:\\((a+b)^n=\\sum^n_i=0\\big(^n_i\\big)a^n-ib^i\\)

\\(F(x)=\\sum_n\\ge 0 \\big(^m_n\\big)x^n=(1+x)^m\\)

\\((5)\\)

归纳证明:

假设:

\\[F(x)=\\sum_n\\ge 0\\big(^n+m_n\\big)x^n=\\frac1(1-x)^m+1 \\]

对于 \\(m=0\\), \\(F(x)=\\frac11-x\\) 命题成立。

对于 \\(m>0\\),

\\[\\frac1(1-x)^m+1 =\\frac1(1-x)^m\\frac11-x \\]

\\[=(\\sum_n\\ge 0\\big(^m+n-1_n\\big)x^n)(\\sum_n\\ge 0x^n) \\]

\\[=\\sum_n\\ge 0x^n\\sum_i=0^n\\big(^m+i-1_i\\big) \\]

\\[=\\sum_n\\ge 0\\big(^m+n_n\\big)x^n \\]

那就差不多啦。

指数级生成函数

对于序列 \\(a\\) 有指数级生成函数形如:

\\[F(x)=\\sum_n a_n\\fracx^nn! \\]

封闭形式

对于 \\(<1,1,1,...>\\) 的指数级生成函数: \\(F(x)=\\sum_n\\ge 0 a_n\\fracx^nn!=e^x\\)

具体来说,对 \\(e^x\\) 泰勒展开得到的就是这个指数级生成函数。暂且当做结论记住就好。

以上是关于生成函数入门的主要内容,如果未能解决你的问题,请参考以下文章

R语言入门——序列数据生成方法汇总

R语言入门——序列数据生成方法汇总

Python入门-生成器和生成器表达式

ES6 从入门到精通 # 15:生成器 Generator 的用法

ES6 从入门到精通 # 15:生成器 Generator 的用法

Python 入门基础11 --函数基础4 迭代器生成器枚举类型