And echoed |

MessageBoxA

园龄:4年10个月粉丝:5关注:0

矩阵快速幂加速递推

矩阵优化递推的思想在于把递推的层数化为矩阵的幂数,也就是说设计一个矩阵 A,使得 An 中的某个元素就是递推的第 n 项,即 fn。这么做就可以将 O(n) 的递推优化为 O(log2n)的矩阵快速幂(矩阵 A 的行列数为常数,因此快速幂中的矩阵乘法复杂度为常数),本质上是一种倍增做法

具体的讲,假如是我们现在有如下线性递推关系

fn,fn1,fn2,,f2,f1fn={fn1,fn2,,fnk1}

其中第二行的 {} 代表一种运算,意味着 fn 可以由 fn1fnk 的这些数做某种运算得出

那我们将这种递推关系转化为矩阵乘法形式(A(k+1)×(k+1) 的方阵),得:

[fnfn1fnk]=[fn1fn2fnk1]A=[fn2fn3fnk2]A2==[fkfk1f0]Ank

这样,我们只需要计算到 fk ,剩下就交给矩阵快速幂 O(log2n) 计算 Ank 即可


那么,如何设计矩阵 A 呢?

我们以计算斐波拉契数列为例,首先我们可以很快得出形如上式的矩乘形式

[fnfn1]=[fn1fn2]A==[f1f0]An1

那么 A 一定为一个 2×2 的矩阵,我们令其为 [abcd] 代入上式 [fnfn1]=[fn1fn2]A 得到如下:

[fnfn1]=[(afn1+cfn2)(bfn1+dfn2)]

因此可以得到

fn=afn1+cfn2fn1=bfn1+dfn2

代入 n 较小的值,手工计算出 fnfn1fn2,最后得解 {a=b=c=1d=0

因此,A=[1110]

本文作者:MessageBoxA

本文链接:https://www.cnblogs.com/SkyNet-PKN/p/17451485.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   MessageBoxA  阅读(76)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 evening Corn Wave
  2. 2 Группа крови Кино
  3. 3 The Sound Of Silence Simon & Garfunkel
  4. 4 dB doll YUE.STEVEN
The Sound Of Silence - Simon & Garfunkel
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.