常系数齐次线性递推

问题:求长度为k的常系数齐次线性递推式Σai*hj->hi+j的第n项hn,可以写成(HA^n),A是k阶矩阵

核心:对(A^n)取模变成(sum_{i=0}^{k-1} c_iA^i),加上H变为(sum_{i=0}^{k-1} c_ih_i)

问题是找一个模之后不变的式子,即某个多项式f(A)=0

凯莱-哈密顿定理:A的特征多项式f(λ)满足f(A)=0

特征矩阵:λI-A

特征多项式:|λI-A|,把λ看作未知数,化简得到(f(lambda)=lambda^k-sum_i a_ilambda^{k-i})

之后把A看作未知数,用A^n模特征多项式即可化简

优化:若只有h0=1则可以求A^(n+k-1),这样每项取的就是当前H的最后一位,而模特征多项式之后的HA^i就只有HA^(k-1)是1其他都是0

(其实就是把h0放到h[k-1]的位置上,最后求h[n+k-1],一样还是取A最左边,所以转移n+k-1次,最后只有h[k-1]要算

直接暴力倍增取模是(O(k^2log n)),用多项式优化取模做到(O(klog klog n))

原文地址:https://www.cnblogs.com/gmh77/p/14561086.html