zoukankan      html  css  js  c++  java
  • 特征多项式与常系数线性齐次递推学习笔记

    快去膜神仙

    特征多项式

    定义一个大小为$ k$矩阵$ M$的特征多项式$ P$要求满足

    $$ sum_{i=0}^k P_iM^i=0$$

    其中$ 0$是一个全$ 0$矩阵

    Cayley-Hamilton定理

    一个矩阵$ P$的特征多项式为

    $$P(lambda)=|lambda E-M|=lambda^n+P_1lambda^{n-1}+P_2lambda^{n-2}+...+P_n$$

    其中$ E$是单位矩阵,$ |lambda|$表示$ lambda$的行列式

    显然有$P(A)=0$

    快速求一般矩阵的特征多项式

    暴力插值+消元是$ O(n^4)$的

    有$ O(n^3)$的奇妙做法

    咕咕咕

    常系数线性齐次递推

    就是给定转移式$ f_i=displaystylesum_{j=1}^k a_j f_{i-j}$求$ f_n$

    $ n leq 10^9 k leq 5·10^4$

    模版题

    直接矩阵快速幂是$ k^3 log n $的,显然无法通过

    这类转移矩阵$ M$有一个非常好的性质:其特征多项式$ P(lambda)=lambda^k-lambda^{k-1}a_1-lambda^{k-2}a_2-..-a_k$

    证明

    将行列式第一行展开

    咕咕咕

    食用方法

    对于该矩阵的特征多项式式$ P$有$ P(M)=0$

    因此有$ M^k=a_1M^{k-1}+a_2M^{k-2}+..+a_k$

    这意味着我们可以通过降次将$ M^n$转化成$ b_0+b_1M+b_2M^2+..+b_kM^k$

    我们令$ M^n$的系数多项式为$ b$

    显然矩阵的乘积等价于对应系数多项式的乘积

    即设$ M^x$的系数多项式为$ a$,$ M^y$的系数多项式为$ b$

    则$ M^{x+y}$的系数多项式为$ a*b$

    初始令$ M$的系数多项式为$ {0,1,0,0..0}$然后快速幂即可

    诶等等..这样求多项式快速幂的话..多项式的长度不会过长吗..?

    回到原特征方程式,我们发现$ P(M)=0$

    意味着我们可以对求出来的系数多项式进行任意的加减特征多项式

    即我们可以对特征多项式进行取模操作,将系数多项式的长度控制在$ k+1$

    计算答案

    如果我们用系数多项式化出原矩阵的话复杂度还没有优化到最优

    发现我们只是要求一个向量乘上前$ k$个矩阵

    而前$ k$个矩阵只有对应位置上有值

    因此答案就是$ displaystylesum_{i=0}^k b_if_i$

    其中$ b$是$ M^n$的系数多项式的对应位系数

    用多项式板子优化复杂度可以达到$ O(n log n log k)$ 

  • 相关阅读:
    C# MenuStrip Visible=false bug的解决方案
    WTL 命令行编译
    LCS 最长公共字串算法实现
    调用系统打开文件OpenAs_RunDLL
    ToolStripSplitButton Checked 效果
    WTL 中使用GDI+ 备忘
    P7482 不条理狂诗曲 题解
    CF1557 比赛记录
    P2519 [HAOI2011]problem a 题解
    CF1540B Tree Array 题解
  • 原文地址:https://www.cnblogs.com/DreamlessDreams/p/10247864.html
Copyright © 2011-2022 走看看