矩阵快速幂中矩阵的构造技巧

来源:互联网 发布:淘宝店如何刷流量 编辑:程序博客网 时间:2024/06/06 13:07

对于出现线性递推的题目,当直接暴力计算的复杂度太高时,我们可以考虑用矩阵快速幂进行加速。

因为虽然矩阵乘法的复杂度为O(n^3),但是通过二进制分解,整体的复杂度变成了 log(n^3) = 3logn = O(logn),复杂度是对数级别的,非常小。

但是矩阵快速幂的难点就是在如何构造矩阵来完成计算。

因为矩阵快速幂是用来加速线性递推的,所以最核心的部分就是线性递推公式

最经典的就是斐波那契数列的递推: f(n) = f(n-1) + f(n-2);

其对应的矩阵就是       f(n+1)      1    1          f(n)

                                      f(n)  =    0    1     *   f(n-1)

可以发现,左面是个常数矩阵,而右面的列向量中每一项就是递推公式中的依赖项。

当递推公式中出现常数时,我们只需在右面的列向量中加入个常数1,即可。

剩下的就是我们如何去构造左面的常数矩阵。其实给出了右面的列向量,我们在根据题中的递推公式,在左面的常数矩阵中填入对应的常数即可。

这样,这个问题就圆满的解答了。

1 0