「常系数齐次线性递推」——矩阵快速幂的优化

  

引入:

  对于递推方程:

  F(x)=i=1kaiF(xi)

  我们显然会得到一个关于F的多项式求逆或者矩阵递推式,大多数情况下我们都是用后者,但是当k很大的时候,k3logn的时间复杂度我们是吃不消的,那么自然我们的前人就搞出了一些优化。

特征多项式及Cayley-Hamilton定理:

一、特征多项式的定义:

  设An阶矩阵,若数λ和非零列向量x使关系式Ax=λx(1)

成立,那么,这样的数λ称为矩阵A的特征值,非零向量x称为A的对应于λ的特征向量。

  (1)式也可写成(AλE)x=0

此式有非零解(即存在x)的充分必要条件是其行列式|AλE|=0(2)

  (1)式可以看作以λ为未知数的一元n次方程,称为A的特征方程,(2)式是关于λn次多项式ϕ(λ),称为A的特征多项式。

二、矩阵的多项式:

  (矩阵的多项式不等于矩阵多项式,读者若想了解请自行百度)

  即对于m次多项式f(x),将矩阵A看作未知数,此时f(A)=a0E+a1A++amAm,记f(A)Am次多项式。其运算满足交换律,即f(A)g(A)=g(A)f(A)

三、Cayley-Hamilton定理:

  对于A的特征多项式ϕ(λ),有ϕ(A)=0

由于笔者能力所限,其证明请读者自行百度。

  P.S:觉得吧……其实考虑到ϕ(A)=|AAE|=|0|=0,感觉这个也是很显然的吧……(评论说不可以这样证……我是不是误导了什么)

n阶常系数齐次线性递推矩阵的特征多项式求法:

一、结论(懒人专用)

  ϕ(λ)=(1)n(λni=1naiλni)

  其中a为递推方程中给出的递推系数。

二、证明

  

 

  那么我们考虑此时行列式如何去求(ai,j表示以上行列式的第i行第j列的元素):

  先考虑这样一件事实:

  若我们在前i列的选择元素的最大行数也为i,那么接下来的列只能选择对角线上元素,否则其最大行数一定为i+1,此时下一列即i+1列我们可以选择第一行或者第i+2行的元素

该事实读者可以自行证明。    

  假设我们选了a1,1,由以上事实,我们只能选择对角线元素,那么此时结果为(1)nλn

  否则选取a2,1由以上事实,我们会得到一个dfs,直到在第i列时选取了a1,i,此时得到结果为a1,i(λ)ni(1)i1=a1,i(1)n1λni

综上所述:

  ϕ(λ)=(1)n(λni=1naiλni)

常系数齐次线性递推:

一、多项式引入:

  我们设xn=f(x)g(x)+h(x)

其中g(x)为已知多项式,那么我们就可以通过多项式除法以及多项式取模来得到f(x)以及h(x)

二、带入矩阵:

  我们将kA视为未知量,则有An=f(A)g(A)+h(A)

我们考虑若g(A)=ϕ(A)=0那么,此时有An=h(A)=i=0k1hiAi3

三、如何计算:

  考虑An我们已经表示出来了,但是,我们发现此时算法复杂非但没有减少,反而增加为k4

  我们设k1矩阵BiT={F(i+k1),F(i+k2),,F(i)}

  我们给式(3)等式两边同时乘上B1,即AnB1=h(A)B1

  化简得到B1+n=i=0k1hiB1+i

  B1+nT={Bn+k,Bn+1}={i=0k1hiF(i+k),,i=0k1hiF(i+1)}

四、时间复杂度

  若只是计算F的某一项,那么时间复杂度上界在于如何去求F的前2k项和以及h

  显然h由多项式取模方法时间复杂度为k2lognklogklogn

  而F可以klogk或者k2处理。  

posted @   Troywar  阅读(4240)  评论(14编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示