您的位置:首页 > 其它

【施工ing】生成函数与多项式——学习笔记

2018-01-18 21:16 357 查看
生成函数大概是一个无穷幂级数形式的函数,我们只关心它的形式,而不会去带入 x 求值。可以看做是多项式,只是带入没有意义。它的一些运算可以对应组合意义,所以能通过它解决一些组合问题。

一般生成函数(OGF):

f(x)=a0+a1x1+a2x2+a3x3+a4x4...

指数型生成函数(EGF),之后会看到为什么要定义这样的函数:

f(x)=a0+a11!x1+a22!x2+a33!x3...

重要的是要把生成函数的代数形式和组合意义对应起来:

考虑一类组合对象组成的集合 A ,给每个 A 中的元素定义一个 “大小”,记为 |a|。一个生成函数的系数 an 等于大小为 n 的元素的个数,这个生成函数是一类组合对象对应的生成函数。

加法就是组合对象的并。

乘法 C=A∗B ,C 中的 an=|{(x,y)|x∈A,y∈B,|x|+|y|=n}| ,好像叫做笛卡尔积,即是满足体积和为 n 的有序二元组数。

定义 SEQ(A) 是一个由生成函数 A 得到的生成函数。

SEQ(A)=∑i=0∞Ai

对应的组合意义是,SEQ(A) 是 A 中的所有元素的有序组合。

例:A={'0','1'}, |0|=|1|=1,则 SEQ(A)={每种长度的01串}

A={1,2,3,...} , |i|=i ,则 SEQ(A)={正整数有序拆分}

可以等比数列求和:SEQ(A)=∑i=0∞Ai=11−A

关于指数生成函数(EGF):

除一个阶乘,就可以对应带标号的组合对象,其他和普通生成函数类型。

定义 SET(A)=∑∞i=0Aii! , 和 SEQ(A) 不同的是算得的是无序的方案数。

由 Taylor 展开,有 ex=1+x11!+x22!+x33!+x44!... ,所以 SET(A)=∑∞i=0Aii!=eA

差不多就这些…

重要的是如何实现多项式的某些运算:

多项式求逆:



Newton 迭代:

已知 g , g(f)=0 ,可以迭代出 f。

设已知 f 前 n 项,即 f≡f0(modxn) ,f−f0≡0(modxn)

Taylor 展开得 0=g(f)=g(f0)+g′(f0)(f−f0)1!+g′′(f0)(f−f0)22!+...≡g(f0)+g′(f0)(f−f0)(modx2n)

所以 g(f0)+g′(f0)(f−f0)≡0(modx2n)→f=f0−g(f0)g′(f0)(modx2n)

也就是说由前 n 项能得到前 2n 项,每次要多项式求逆,复杂度 T(n)=T(n/2)+O(nlogn)=O(nlogn)

给定 A 求 lnA :

f=lnA ,f′=A′A ,就好了。

给定 A 求 eA :

f=eA ,设 g(x)=lnx−A ,则 g(f)=0 ,牛顿迭代即可。

【施工ing……..】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: