生成函数学习笔记

因为本来数学就好弱,所以就一边做题一边学,边记录一下吧。

1.多项式求逆元

假设现在给定一个多项式 A ,要求多项式B使得 AB1(mod xn)

首先对于多项式的题目,思路大概有三种:
1. 倍增
2. 分治
3. 卡常

求逆元用的是倍增的思想。

假设我们当前求出了 B0,AB01(mod xn2)

那么显然,由于 AB1(mod xn) ,则 AB1(mod xn2)

所以 BB00(mod xn2)

(BB0)20(mod xn)

B2B0(2BB0)(mod xn)

两边同时乘以 A ,则
BB0(2B0A)(mod xn)

那么 B 就可以计出来了。

时间复杂度f(n)=f(n/2)+nlogn=O(nlogn)

2.多项式除法及取模

设现在有两个多项式 A,B ,其中 Deg(A)=n,Deg(B)=m,nm>0

我们要求出多项式 D,M ,使得 A=BD+M ,且 Deg(D)=nm,Deg(M)<m

先写出来
A(x)=B(x)D(x)+M(x)
A(1x)=B(1x)D(1x)+M(1x)

A(x) 的倒置 Ar(x)=xnA(1x)

我们对等式两边同乘 xn ,则
xnA(1x)=xnB(1x)D(1x)+xnM(1x)
xnA(1x)=xmB(1x)xnmD(1x)+xnM(1x)
Ar(x)=Br(x)Dr(x)+xnM(1x)

我们将这条式子放在 mod xnm+1 意义下看,
Ar(x)Br(x)Dr(x)+xnM(1x)(mod xnm+1)

因为 Deg(M)<m ,所以 xnM(1x) 的最低次大于等于 nm+1 ,因此 xnM(1x)0(mod xnm+1)

所以
Ar(x)Br(x)Dr(x)(mod xnm+1)
Dr(x)Ar(x)[Br(x)]1(mod xnm+1)

由于 Deg(D)=nm<nm+1 ,所以直接相乘得出来的就是原来的 Dr

那么我们就可以得到 D 了,同理也可以得到M

复杂度为计算逆元以及乘法的复杂度,所以也是 O(nlogn) 的。只是常数大了一点点。

3.齐次线性递推关系

设一个数列 A k齐次线性递推关系,当且仅当其满足
ik,Ai=kj=1AijCj
其中 C 为给定的一个k项的数列。

要快速求出 An ,一个经典的做法就是构造一个 kk 的矩阵,然后矩阵快速幂。这样的复杂度是 O(k3logn) 的。

但事实上复杂度能做得更好。

设多项式 M(x)=xkC1xk1C2xk2Ck 。这个多项式也被称为 A 的特征多项式。

A的生成函数为 A(x)=i0Aixi

那么我们可以发现的是
P(x)=A(x)C1xA(x)C2x2A(x)CkxkA(x)=A(x)Mr(x)
满足 Deg(P)<k ,因为后面的项都被约掉了。

因此, A(x)=P(x)Mr(x)

也就是说,一个 k 齐次线性递推关系的数列的生成函数,必然能表示成一个次数小于k的多项式除以一个次数为 k 的多项式的形式。

同理,对于一个分式P(x)M(x),若满足 Deg(M)>Deg(P) ,则其必然为一个 Deg(M) 齐次线性递推关系的数列的生成函数。

但只有这些还不够,有一个非常重要的定理。

Cayley-hamilton定理

若存在一个多项式 S ,设Deg(S)=l,满足 M|S ,则以 M 为特征多项式的数列A必然满足

0=i=0lSiAi

计算 An

设多项式 S(x)xN(mod M(x)) 。那么 xNS(x) 必然能被 M(x) 整除。

由上面的定理可得
AN=k1i=0SiAi

那么现在的问题就是计算这个 S(x) 。一种暴力的做法就是用快速幂暴力乘,暴力取模,这样的复杂度是 O(k2logN) 的。

但我们上面已经讲了取模可以做到 O(NlogN)

那么计算 S 的复杂度就可以使O(klogklogN)

4.多点求值

给定一个多项式 F(x) ,以及若干个 xi ,让你求出 F(xi)

上面说过了多项式的题无非倍增或分治。这里就是分治。

设过程Solve (l,r,F) ,表示我们要计算出所有的 F(xi),i[l,r] ,并且 Deg(F)=O(rl)

那么很显然,当 l=r 时,直接计算。

否则,我们设 mid=l+r2

构建两个多项式 M0,M1 ,分别满足

M0(x)=i=lmid(xxi)

M1(x)=i=mid+1r(xxi)

Q0,Q1 ,满足

Q0(x)F(x)(mod M0(x))

Q1(x)F(x)(mod M1(x))


F(x)=M0(x)C0(x)+Q0(x)

F(x)=M1(x)C1(x)+Q1(x)

我们将 xi,i[l,mid] 代入 F(x) ,可得 F(xi)=M0(xi)C0(xi)+Q0(xi)

又由于 M0(xi)=0 ,所以 F(xi)=Q0(xi)

对于 i[mid+1,r] 同理。

那么我们递归下去,Solve (l,mid,Q0) 以及Solve (mid+1,r,Q1) 即可。并且 Deg(Q0)=O(midl)

总的复杂度为 O(nlog2n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值