zoukankan      html  css  js  c++  java
  • 处理线性递推的一些方法

    线性递推

    形如

    [F_n=sum_{i=1}^kF_{n-i}*a_i ]

    通常情况下给出(F_{0ldots 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)^2pmod{B(x)} ]

    所以可以用类似于快速幂的方式求(x^n\%B(x))

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

    分治FFT

    可以发现,这个转移也是一个卷积式子。所以我们可以分治。处理区间([l,r])的时候求出(f_{lldots mid})(f_{mid+1ldots 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))

  • 相关阅读:
    TP框架对数据库的操作
    Nginx的安装及配置
    微信小程序的入门
    MySQL的多表联查
    Larave中CSRF攻击
    Linux(三)
    Linux(二)
    Linux(一)
    安全测试检查项
    mysql-视图及索引简介
  • 原文地址:https://www.cnblogs.com/hchhch233/p/10955854.html
Copyright © 2011-2022 走看看