矩阵乘法加速递推

版权声明:转载无所谓的。。。 https://blog.csdn.net/xuxiayang/article/details/82529867

学习本算法最好有一定的数学基础

引入

先来看一下这样一道题:


给定递推式

f [ i ] = f [ i 2 ] + f [ i 1 ] + i + 1

f [ 1 ] = f [ 2 ] = 1 f [ n ] ( n <= 1 e 9 )


看到数据范围,可能会感觉无从下手,推算 f 也发现并不能找到规律,这个时候我们怎么办呢?
这就衍生除了一个强大的算法——矩阵乘法

先看概念


概念

A n × m 的矩阵,当且仅当 B m × n 的矩阵时,它们可以进行矩阵乘法,它们的积是一个 n × n 的矩阵 C

解题

那这有什么用呢?我们重新看回上面那道题

f [ i ] = f [ i 2 ] + f [ i 1 ] + i + 1

观察发现,其实当我们要往下一步进行推算时,每个项都有相应的变化,即
第一项 f [ i 2 ] -> f [ i 1 ]
第二项 f [ i 1 ] -> f [ i ] -> f [ i 2 ] + f [ i 1 ] + n + 1
第三项 i -> i + 1
第四项 1 不变


也就是说,它们之间是具有互相递推的关系的,我们就可以用矩阵乘法对应每个项的系数即可

最后因为矩阵乘法满足结合律,所以我们可以先算出中间矩阵的 n 次方,求解即可


详细解法见:https://blog.csdn.net/xuxiayang/article/details/82021171

猜你喜欢

转载自blog.csdn.net/xuxiayang/article/details/82529867
今日推荐