处理线性递推的一些方法

线性递推

形如
\[ F_n=\sum_{i=1}^kF_{n-i}*a_i \]
通常情况下给出\(F_{0\ldots k}\)的值。


矩阵快速幂

适用于\(k\)比较小,\(n\)非常大的情况。

复杂度\(O(k^3logn)\)

特征多项式

用于解决常系数齐次线性递推。

这个可以看做矩阵快速幂的一个优化。

证明

\(\displaystyle B(x)=x^k-\sum_{i=1}^ka_ix^{k-i}\)。现在要求\(F_n\)的值。设\(G(x)=x^n\% B(x)\),则$ \displaystyle F_n=\sum_{i=0}^kg_i*F_i$。

因为
\[ x^{2*n}\equiv (x^n)^2\pmod{B(x)} \]
所以可以用类似于快速幂的方式求\(x^n\%B(x)\)

复杂度\(O(k^2logn)\)

分治FFT

可以发现,这个转移也是一个卷积式子。所以我们可以分治。处理区间\([l,r]\)的时候求出\(f_{l\ldots mid}\)\(f_{mid+1\ldots r}\)的贡献。

复杂度\(O(nlog^2n)\)

多项式求逆

\(A(x)=\sum_{i=1}^ka_ix^i\),则:
\[ F=F*A+[x_0]F\\ \Rightarrow F=\frac{[x^0]F}{1-A} \]
复杂度\(O(nlogn)\)

转载于:https://www.cnblogs.com/hchhch233/p/10955854.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值