矩阵快速幂小记

Posted limil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵快速幂小记相关的知识,希望对你有一定的参考价值。

介绍

使用快速幂来加速矩阵的幂运算。常用来求n很大时递推式$$f(n) = k_1 cdot f(n-1)+k_2 cdot f(n-2)... k_i cdot f(n - i)$$的值

实现和证明

由于矩阵(A)自乘满足交换律,也满足结合律,所以在计算(A^m)时不用担心左乘和右乘的问题,直接套快速幂的模板即可。

如何加速计算递推式(f(n))?以递推式(f(n)=f(n-1)-2f(n-2)+3f(n-3))为例。我们先把系数提出来,然后由矩阵的乘法可以知道

[f(n)=left( egin {array}{cc} 1 & -2 & 3end{array} ight) cdot left( egin {array}{cc} f(n-1) \ f(n-2) \ f(n-3)end{array} ight) ]

这样就得到了f(n)。然后为了可以持续计算(f(n+1),f(n+2)...),通过利用矩阵乘法,我们把(f(n-1),f(n-2))(f(n))组合起来。

[left( egin {array}{cc} f(n) \ f(n-1) \ f(n-2)end{array} ight)=left( egin {array}{cc} 1 & -2 & 3 \ 1 & 0 & 0 \ 0 & 1 & 0end{array} ight) cdot left( egin {array}{cc} f(n-1) \ f(n-2) \ f(n-3)end{array} ight) ]

这样就可以得到

[left( egin {array}{cc} f(n) \ f(n-1) \ f(n-2)end{array} ight)=left( egin {array}{cc} 1 & -2 & 3 \ 1 & 0 & 0 \ 0 & 1 & 0end{array} ight) ^{n-3} cdot left( egin {array}{cc} f(3) \ f(2) \ f(1)end{array} ight) ]

这样就可以用矩阵快速幂愉快地求f(n)啦。

例题
HDU6185 - Covering


以上是关于矩阵快速幂小记的主要内容,如果未能解决你的问题,请参考以下文章

快速幂,矩阵乘法,矩阵快速幂

矩阵快速幂

快速乘快速幂(矩阵快速幂)

整数快速幂与矩阵快速幂算法详解

算法初步:快速乘,快速幂,矩阵快速幂

矩阵快速幂