码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵快速幂小记

时间:2020-05-03 00:40:24      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:show   math   证明   pid   strong   over   利用   运算   array   

介绍

使用快速幂来加速矩阵的幂运算。常用来求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( \begin {array}{cc} 1 & -2 & 3\end{array} \right) \cdot \left( \begin {array}{cc} f(n-1) \\ f(n-2) \\ f(n-3)\end{array} \right) \]

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

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

这样就可以得到

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

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

例题
HDU6185 - Covering

矩阵快速幂小记

标签:show   math   证明   pid   strong   over   利用   运算   array   

原文地址:https://www.cnblogs.com/limil/p/12820395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!