FFT 优化常系数齐次线性递推式

fi 序列满足 fi=j=1kcjfijk32000,n109
已知 f1fkc1ck。求 fn

这称为 "k 次齐次常系数线性递推式"。


如果 k 比较小,可以用矩阵快速幂;但 k 太大,一次矩阵乘法都很慢。我们可以用 FFT 优化它。复杂度 O(klogklogn)

先回忆一下矩阵快速幂。

[fnfn1fnk+1]=[c1c2ck10001010][fn1fn2fnk]

特征多项式:一个矩阵 M 的特征多项式 λ 满足 det(λIM)=0。(det(λIM) 是一个关于 λ 的多项式)

记中间的转移矩阵为 M。它的特征多项式为 ϕ(M)=λkc1λk1c2λk2ck

克雷-哈密尔顿(Cayley-Hamiltion)定理:ϕ(M)=0

xn=p(x)×ϕ(x)+r(x)(带余除法)。degr(x)k1=degϕ(x)
假设 r(x) 求出来了。令 x 为矩阵 MMn=p(M)ϕ(M)+r(M);由定理,ϕ(M)=0。所以 Mn=r(M)=riMi

Fi=[fifik+1]

Fn+k1=i=0k1riMiFk1=i=0k1riFi+k1

fn=i=0k1rifiO(k) 可求。

最后一个问题:r(x) 怎么算?

如果用带余除法算,O(nlogn);而 n1e9 会爆炸。


xa+b%ϕ(x)=xaxb%ϕ(x)=((xa%ϕ(x))(xb%ϕ(x))%ϕ(x)

xa%ϕ(x)xb%ϕ(x) 都是 k 次,因此如果求得 xa%ϕ(x)xb%ϕ(x),就能 O(klogk) 求带余除法。

那么让 xa%ϕ(x) 继续递归即可。递归 O(logn) 层。

复杂度 O(lognklogk)

posted @   FLY_lai  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示