矩阵快速幂总结

update觉得自己之前写的跟..一样,重写了

依然主要还是自用

首先矩阵一条性质的概述和证明

概述:对于一个临接矩阵$G$来说,它自乘$G^k$次方中$G[i][j]$含义为从i走到j走k步方案数.

证明:比较麻烦,我们设f[i]表示从1走到其他点方案数,那么根据矩阵递推优化,k次就是转移了k次,那么每次走一步,k次就是走了k步

最好手模一下,然后自己随便写一个数据验证一下.

然后矩阵可以优化递推,比如优化菲波纳契数列的递推,暴力递推时间复杂度是$O(n)$的用矩阵快速幂能优化成$8*log(n)$的

具体优化步骤,

首先把之前各项写出来,

先写出这一项可以由什么转移过来,

通过添加系数的方法把各项算出来

就拿菲波纳契数列为例

首先假设f矩阵为

$(f[n], f[n-1])$

根据横乘竖的原则

得出$(f[n],f[n-1])$=$(f[n-1],f[n-2])\times$$\left(\begin{array}{cc}1&1\\1&0\end{array}\right)$

那么关于矩阵快速幂优化一些套路

1.ans矩阵对角线初始化为1

这是相当于快速幂中ans初始化为1的操作(对角线为1是单位矩阵,乘一个矩阵后变为乘的那个矩阵 1*5=5)

2.处理出第一次方案,然后递推m--次

这样我们算出第一次方案,然后递推m-1次可得到最终系数矩阵

3.最后还要算一次,从第一次转移到最后一次出答案

我们算出往往是系数矩阵,系数矩阵递推了m-1次我们让第一次*当前转移m-1次系数矩阵就是最终结果

我们这里考虑的都是系数矩阵

 

还是觉得自己写的很...

posted @ 2019-07-23 19:12  znsbc  阅读(307)  评论(0编辑  收藏  举报